希腊字符显示问题Tomcat 7

时间:2014-07-15 03:55:06

标签: java tomcat character-encoding

我在显示希腊字符方面遇到了问题。字符应显示为σ μυστικός αυτό?,但它们显示为ó ìõóôéêüò áõôü? 还有其他一些希腊字符显得很好,但上面的文字显得乱码。

使用以下代码通过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。

1 个答案:

答案 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?