【发布时间】:2014-07-15 03:55:06
【问题描述】:
我在显示希腊字符时遇到问题。字符应显示为σ μυστικός αυτό?,但它们显示为ó ìõóôéêüò áõôü?
还有一些其他的希腊字符看起来很好,但上面的文字出现了乱码。
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 服务器上时出现乱码。两台机器都安装了 JDK7 和 Tomcat 7。
【问题讨论】:
-
我能想到的一些原因:您确定您从“fn”获得了 ISO-8859-1 编码的字符吗?当你渲染这样的字符时,是在浏览器中吗?对于某些浏览器,您需要添加
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,或者对于 HTML5:<meta charset="utf-8">,即使您在 HTTP 标头中发送编码。 -
@morgano 我已经使用
file -bi命令验证了 HTML 文件的编码确实是 ISO-8859-1。 HTML 文件也包含<meta http-equiv="Content-Type" content="text/html; charset=utf-8">。此外,如果直接打开 HTML 文件(而不是通过 servlet),字符会显示得很好。 -
file -bi无法告诉您您的文件是 ISO-8859-1 还是 ISO-8859-7(这只是尽力估计),所以我认为 @JimGarrison 是对的
标签: java tomcat character-encoding