特殊和重音字符
我正在为法国客户做一些工作,因此需要处理重音字符。 但是我遇到了很多困难,我希望解决方案很简单,有人可以向我指出。
字符串: 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”)已经有格式错误的内容)。
这可能有三个原因:
-
这是一个GET请求,服务器未配置为使用UTF-8来解析请求URI。 目前还不清楚你正在使用哪个服务器,所以这里有一个以Tomcat为目标的答案:将
/conf/server.xml
HTTP连接器的URIEncoding
属性设置为UTF-8
。 -
如果是POST请求,则需要确保servletcontainer使用UTF-8对请求主体进行编码。 你可以事先通过
request.setCharacterEncoding("UTF-8")
来做到这一点。 -
您正在编写参数的控制台不支持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本地化打印这些字符?