jsp页面以非英语语言显示垃圾字符

时间:2011-02-02 14:07:58

标签: java jsp utf-8 character-encoding

我有一个主JSP页面说jsp1,它包含两个JSP页面(jsp2,jsp3)。这些页面中的所有字符串都来自属性文件。

使用native2ascii

转换非英语属性文件

native2ascii -encoding =“8859-1”lang.properties lang1.properties

所有JSP页面都有 <%@ page contentType =“text / html; charset = UTF-8”language =“java”%>

现在当显示主jsp页面(jsp1)时,我们在jsp2和jsp3的几个字符串中看到乱码。直到现在我已经看到这种情况发生在俄语,韩语,日语中。它发生在随机字符串上。

是否有人知道可能出现的问题

使用更多详情进行更新

rus_utf8.proeperties中的字符串是

Щелкните <strong>УСТАНОВИТЬ СЕЙЧАС</strong> и сохраните файл в некотором расположении

使用native2Ascii进行转换后,rus.properties中的String为

\u0429\u0435\u043b\u043a\u043d\u0438\u0442\u0435 <strong>\u0423\u0421\u0422\u0410\u041d\u041e\u0412\u0418\u0422\u042c \u0421\u0415\u0419\u0427\u0410\u0421</strong> \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438.

在JSP中,我们使用struts <s:text>从属性文件

加载字符串

在firefox中,字符串显示为

��елкните УСТАНОВИТЬ СЕЙЧАС и сохраните файл в некотором расположении.

char Щ出现了乱码。页面中其他位置的相同字符串已正确显示。

2 个答案:

答案 0 :(得分:6)

  

使用native2ascii

转换非英语属性文件
native2ascii –encoding="8859-1" lang.properties lang1.properties

这是无效的。应该是

native2ascii –encoding ISO-8859-1 lang.properties lang1.properties

除了你在那里的语法错误(应该立即中止native2ascii),ISO-8859-1编码对于俄语,韩语和日语字符串来说可能是不正确的。 ISO-8859-1编码根本不包括这些字符。假设您将其保存为UTF-8,那么您应该使用

native2ascii –encoding UTF-8 lang.properties lang1.properties

这样,native2ascii将从UTF-8 lang.properties转换为ISO-8859-1兼容lang1.properties。 native2ascii将始终转换为ASCII。 -encoding属性涉及源文件的编码,而不是目标文件。

对于JSP页面,只需

<%@page contentType="text/html; charset=UTF-8" %>

应该足够,每http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

另见:


根据您的更新,使用示例

更新。一切都在正常运作。它看起来很像UTF-8 BOM(Byte Order Mark)是罪魁祸首。记事本默认添加它。尝试在另一个编辑器中创建属性文件,而不是像Eclipse。

答案 1 :(得分:0)

我和你有同样的问题,我也试过类似的解决方案,但是他们没有工作。因此我怀疑它可能不是JSP配置的问题,而是我的tomcat配置问题。

我在中文网站https://openhome.cc/Gossip/Encoding/Servlet.html上发现了这个问题:request.setCharacterEncoding("UTF-8");。它对我有用。我在request.getParameter();之前添加了此内容。