我有一个基于 Spring MVC 的 Java webapp。我有一些数据要用日文字体显示。我做了一些在线研究,发现 UTF-8 是我需要的字符集编码。我将以下行添加到我的应用程序中。它所做的只是将字符集编码添加到响应 header 。
response.setCharacterEncoding("UTF-8");
当我在 Windows 7 上测试时,日语字体显示正确。
当我在 Unix 机器上运行同一个 war 文件时,我只看到这些字符:���� 和数字(如果有的话)。我在 Chrome 调试器中检查了响应 header ,我仍然看到 UTF-8 编码。
我在 header 信息中看到的唯一区别是 windows 的服务器为 Apache-Coyote/1.1,而 unix 上的服务器为 apache。
有人可以建议我还需要检查什么吗?
最佳答案
问题可能在于字符串的创建方式。是从文件中读取的吗?
如果是这样,文件本身有一个编码,您可能会根据默认平台编码读取它。如果文件采用一种编码,但您以另一种编码读取它,则字符串中的文本从一开始就是不正确的。
使用调试/日志记录的快速检查是字符串的长度。如果它在 Windows 上报告一个长度而在 Unix 上报告另一个长度,那么在生成字符串时可能存在编码错误。例如,当 UTF-8 中的字符被解释为 ISO-8859 时,您会看到如下内容:– €“
在这种情况下,您希望字符串的长度为 1,但它的长度为 3。如果将其嵌入到其他文本中,您会看到长度相差 2,即使文本应该相同。
关于java - 在 Unix 机器上运行时日语字体无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15617723/