java - 在 Unix 机器上运行时日语字体无法正确显示

标签 java javascript jakarta-ee unix character-encoding

我有一个基于 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/

相关文章:

javascript - 任何 Sublime Text 插件都可以使用匿名函数自动包装生成的 js

javascript - 可调差异算法

java - 使用 Hibernate Criteria API 编写 HQL 子句

java - 替代 Java 中的首选项

java - Hibernate 序列化异常

Javascript 跳过 For 循环中的间隔

java - Spring Beans 中的 EJB 3 Sessioncontext

java - 即使选项卡关闭后,Jsp 页面仍在运行

java - 为什么Semaphores中的acquire()方法不用同步?

java - 将属性 'source' 设置为 'org.eclipse.jst.jee.server:JSFTut' 没有找到匹配的属性