特殊和重音字符

我正在为法国客户做一些工作,因此需要处理重音字符。 但是我遇到了很多困难,我希望解决方案很简单,有人可以向我指出。

字符串: La Forêt pour Témoin转换为: La For? pour T?oin La For? pour T?oin

请注意重音字符后面缺少的字符 – ê后面的té后面的m

我已经尝试使用StringEscapeUtils,它成功地转义了一些字符,例如ă 。 我还构建了自己的转义函数,它产生相同的结果( ă将起作用, ê不会)。

 private String escapeChars(String string) { char[] chars = string.toCharArray(); String result = ""; for (int i = 0; i < chars.length; i++) { int c = chars[i]; result += "&#" + c + ";"; } return result; } 

该项目使用App Engine插件在eclipse中运行,我无法缩小问题是由Java,App Engine还是SQLite引起的。

任何帮助表示赞赏。

编辑:我发现只是从表单中显示请求参数时字符串格式不正确。 (即,request.getParameter(“string”)已经有格式错误的内容)。

我尝试过丹尼尔建议的元标记没有成功。 我认为你是在正确的轨道上,html文件的标题数据如下:

      

当重音字符被硬编码到JSP中时,它们将按预期显示。

编辑:我还在页面的最开头添加了

我非常接近解决方案。 我发现如果我从浏览器中更改页面的编码,表单数据会正确传递给服务器。 我无法弄清楚如何使浏览器自动检测页面编码。

      

解决:我无法弄清楚如何使浏览器自动检测java默认的UTF-8编码。 所以我使用request.setCharacterEncoding(“ISO-8859-1”)强制字符编码为ISO-8859-1。

编辑:我发现只是从表单中显示请求参数时字符串格式不正确。 (即,request.getParameter(“string”)已经有格式错误的内容)。

这可能有三个原因:

  1. 这是一个GET请求,服务器未配置为使用UTF-8来解析请求URI。 目前还不清楚你正在使用哪个服务器,所以这里有一个以Tomcat为目标的答案:将/conf/server.xml HTTP连接器的 URIEncoding属性设置为UTF-8

  2. 如果是POST请求,则需要确保servletcontainer使用UTF-8对请求主体进行编码。 你可以事先通过request.setCharacterEncoding("UTF-8")来做到这一点。

  3. 您正在编写参数的控制台不支持UTF-8。 目前还不清楚你在谈论哪个控制台,所以这里是一个以Eclipse为目标的答案:在Window> Preferences> General> Workspace> Text File Encoding中将它设置为UTF-8。

另见

  • Unicode – 如何使角色正确? – 包含各种问题的详细解答 。

好的,所以第一个问题是您需要找出数据丢失的位置。

  • 添加unicode字符的适当日志记录(理想情况下为hex),以便您可以查看是否可以写入SQLite并正确检索数据。
  • 硬编码一些数据,以便您可以看到它是否正确返回
  • 确保您进行文本到二进制转换的任何位置 ,指定适当的编码(例如UTF-8)

你还没有真正说出出错的地方,但是我希望如果你整理出字符编码,其余部分就应该存在。 也许 SQLite有问题,但我怀疑它……

您需要确保发送回浏览器的HTML具有字符集。 你应该发回Content-Type: text/html; charset=UTF-8 Content-Type: text/html; charset=UTF-8作为HTTP响应头包含,作为head标记的第一个子元素:

  

或者,如果您使用的是XHTML:

  

虽然只是拥有meta标记通常可以解决问题。

此外,使用W3C标记validation服务确保您的HTML有效。

另请参阅: 常见问题解答:出现奇怪的字符和问号,而不是重音字符

字符串是否有可能,但是你试图用en-us本地化打印这些字符?