2014-07-15 3 views
1

그리스 문자 표시 문제가 있습니다. 문자는 σ μυστικός αυτό?으로 표시되어야하지만 ó ìõóôéêüò áõôü? 다른 그리스 문자는 잘 표시되지만 위의 문자는 깨져 보입니다.그리스 문자 표시 문제 Tomcat 7

내용은 서블릿에 의해 다음과 같은 코드를 사용하여 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이 설치되어 있습니다.

+1

내가 생각할 수있는 몇 가지 원인은 다음과 같습니다. "fn"에서 ISO-8859-1 인코딩 된 문자를 가져 왔습니까? 이러한 문자를 렌더링 할 때 브라우저에 있습니까? 일부 브라우저의 경우 또는 HTML5의 경우 : 'HTTP 헤더에 인코딩을 보내는 경우에도 마찬가지입니다. – morgano

+0

@morgano HTML 파일의 인코딩이'file -bi' 명령을 사용하여 실제로 ISO-8859-1임을 확인했습니다. HTML 파일은'도 포함합니다. 또한 HTML 파일을 직접 열면 (서블릿을 통하지 않고) 문자가 잘 표시됩니다. – Manish

+0

'file -bi'는 여러분의 파일이 ISO-8859-1인지 ISO-8859-7인지를 알 수 없습니다 (최선의 노력 일뿐입니다). 그래서 @GimGarrison이 맞다고 생각합니다. – morgano

답변

1

저는 데이터를 읽을 때 입력 인코딩이 99 %인지 확실합니다. ISO-8859-1 (ISO-8859- 일 때 대신)으로 해독 중입니다. 이것은 당신이 보는 증상을 일으킬 것입니다.

가장 간단한 방법은 16 진수 편집기에서 HTML을 열고 문자 인코딩을 직접 검사하는 것입니다. 그리스 문자가 각각 1 바이트를 차지한다면 거의 확실하게 ISO-8859-7 (-1이 아님)입니다. 그들이 각각 2 바이트를 차지한다면 그것은 UTF-8입니다.

게시 한 내용에서 ISO-8859-7처럼 보입니다. 해당 문자 집합에서 소문자 인 σ0xF3이고 ISO-8859-1에서는 동일한 코드가 표시된 데이터와 일치하는 ó으로 매핑됩니다. 남은 문자를 모두 매핑하면 코드에 일대일 일치가 표시됩니다. Windows 시스템의 기본 코드 페이지가 ISO-8859-7 일 수 있습니까?

+0

인코딩을 검사 할 것입니다. . 그러나 문제가 문자 집합과 관련된 경우 서버가 Windows 시스템에서 실행 중일 때 왜 제대로 표시됩니까? – Manish

+0

파일이 UTF-8인지 ISO-8859-7인지 알기 전까지는 추측 할 수 없지만 이제는 99.999 %가 후자입니다. 내 편집을 참조하십시오. –

+0

당신이 옳다고 생각합니다. 나는 문자와 문자를 매치 시켰고, 텍스트는'ISO-8859-7' 인코딩으로 보인다. 이제 내 문제는'ISO-8859-1' 인 여러 HTML 파일들이 있다는 것이다. 'ISO-8859-1' 파일과'ISO-8859-7' 파일이 모두 올바르게 읽힐 수 있도록 파일 내용을 읽는 "일반적인"방법이 있습니까? – Manish