2013-03-25 75 views
1

我有一个基于Spring MVC的Java webapp。我有一些数据以日文字体显示。我做了一些在线研究,并注意到UTF-8是我需要的字符编码。我将下面的代码添加到我的应用程序中。它所做的只是将charset编码添加到响应标头。日文字体在Unix上运行时没有正确显示

response.setCharacterEncoding("UTF-8"); 

当我在Windows 7上测试时,日文字体显示正常。

当我在Unix机器上运行同一个战争文件时,我只看到这些字符: 和数字(如果有的话)。我在Chrome Debugger中检查了响应头,我仍然看到UTF-8编码。

我在头文件信息中看到的唯一区别是windows有Apache-Coyote/1.1服务器,而unix上有apache服务器。

有些人可以建议我还需要检查什么?

+1

您是否检查过Apache的'server.xml'来查看URIencoder是否设置为UTF8?如果不将此行添加到连接器标签:'<连接器URIEncoding =“utf-8”.... />'。 – ye9ane 2013-03-25 15:18:34

+0

我加了。没有变化 – javaMan 2013-03-25 18:28:34

回答

2

问题可能在于如何创建字符串。它是从文件中读取的吗?

如果是这样,文件本身就有一个编码,您可能会根据默认的平台编码读取它。如果文件采用一种编码,但是您在另一种编码中读取,则字符串中的文本将不正确。

使用调试/日志记录进行快速检查是字符串的长度。如果它在Windows上报告一个长度,在Unix上报告另一个长度,那么在生成字符串时可能会出现编码错误。一个例子是UTF-8中的一个字符被解释为ISO-8859,并且您看到类似这样的内容: -

在这种情况下,您会希望字符串的长度为1,但它具有长度为3.如果该内容嵌入其他文本中,即使文本应该相同,也会在长度上看到差异2。

+0

我从sql数据库中获得。我不是从档案中读取。我所看到的都是unix中的这些字符。 – javaMan 2013-03-25 15:12:57

+2

哦。然后这个答案完全脱离基础。 “?”字符表示您的字体没有要求显示的日文字形。尝试使用不同的字体,特别是您知道包含日文字形的字体。 – 2013-03-25 15:38:13

+0

你可以给我一些更详细的信息,我怎么可以尝试不同的字体。我不知道 – javaMan 2013-03-25 16:17:54