我在显示希腊字符方面遇到了问题。字符应显示为σ μυστικός αυτό?
,但它们显示为ó ìõóôéêüò áõôü?
还有其他一些希腊字符显得很好,但上面的文字显得乱码。
使用以下代码通过servlet从HTML文件中读取内容:
public String getResponse() {
StringBuffer sb = new StringBuffer();
try {
BufferedReader in = new BufferedReader((new InputStreamReader(new FileInputStream(fn), "8859_1")));
String line=null;
while ((line=in.readLine())!=null){
sb.append(line);
}
in.close();
return sb.toString();
}
}
我在发送回应时将编码设置为UTF-8
:
PrintWriter out;
if ((encodings != null) && (encodings.indexOf("gzip") != 1)) {
OutputStream out1 = response.getOutputStream();
out = new PrintWriter(new GZIPOutputStream(out1), false);
response.setHeader("Content-Encoding","gzip");
}
else {
out = response.getWriter();
}
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
out.println(getResponse());
我的本地开发机器(Windows)上的字符显示正常,但在CentOS Server上部署时显得乱码。两台机器都安装了JDK7和Tomcat 7。
答案 0 :(得分:1)
我99%确定问题是您的输入编码(当您读取数据时)。您可以将其解码为ISO-8859-1,而不是ISO-8859- 7 。这会导致你看到的症状。
最简单的检查方法是在十六进制编辑器中打开HTML并直接检查字符编码。如果希腊字符每个占用一个字节,那么它几乎肯定是ISO-8859-7(不是-1)。如果它们每个占用2个字节,则它是UTF-8。
根据您发布的内容,它看起来像ISO-8859-7。在该字符集中,小写sigma σ
为0xF3
,而在ISO-8859-1中,相同代码映射到ó
,与您显示的数据相匹配。我确定你是否映射了所有剩余的字符,你会在代码中看到一对一的匹配。也许您的Windows系统的默认代码页是ISO-8859-7?