2012-03-22 4 views
0

Windows 서버에 Tomcat 6, Linux에 JBoss 5가 2 개 있습니다.톰캣 Windows/JBoss Linux 인코딩 문자 집합

ouputstream에 JSON (applicatio/json)을 작성할 때 Tomcat에서는 특수 문자 (Á, á 등 ..)가 표시되지만 JBoss에서는 잘못된 문자가 표시됩니다.

는 어떻게 바로 출력 스트림입니다 :

protected void writeToOutputStream(String response, String tag) { 
    ServletOutputStream outputStream = null; 
    try { 
     logInfo("Writing to output stream"); 
     outputStream = httpresponse.getOutputStream(); 
     outputStream.write(response.getBytes(), 0, response.getBytes().length); 
     outputStream.flush(); 
    } catch (IOException ex) { 
     logError("Could not write response into output stream", ex); 
    } finally { 
     try { 
      outputStream.close(); 
     } catch (IOException ex) {} 
    } 
} 

내가 가진 캐릭터 세트를 강제하는 경우

httpresponse.setCharacterEncoding("utf-8"); 

그것은 보스에서 확인을 얻을 수 있지만 바람둥이에 ...

어떤 생각이 어떻게 해결할 수 있습니까?

답변

2

response.getBytes()는 플랫폼 기본 인코딩을 사용하여 String을 바이트로 변환하며 인코딩은 Windows (CP-1252) 및 Linux 컴퓨터 (utf-8)에서 동일하지 않을 가능성이 높습니다.

content-type 응답 헤더 (위의 코드에서 utf-8)의 charset으로 지정된 인코딩과 동일해야하는 인코딩 (바람직하게는 'utf-8')을 getBytes()에 전달해야합니다.

부수적으로, Outpustream에 쓰는 방법과 getBytes()를 두 번 호출하는 방법은 상당히 비효율적입니다. 코드를 작고 효율적으로 유지하려면 아파치 commons-io와 IOUtils.copy()와 같은 유틸리티를 사용하여 스트림을 조작하십시오.

+0

해결! 나는 getBytes를 두 번 호출하는 것으로 나타났습니다. 이제는 팁을 주셔서 감사합니다. –