2011-11-18 2 views
2

다음은 Linux 컴퓨터에서는 작동하지 않습니다.CharsetDecoder가 Linux 컴퓨터에서 작동하지 않습니다.

 Charset charset = Charset.forName("UTF-8"); 
     CharsetDecoder decoder = charset.newDecoder(); 

     try { 
      FileOutputStream fo = new FileOutputStream("hi.txt"); 
      PrintStream ps = new PrintStream(fo); 
      String msgBody = "ΣYMMETOXH"; 
      ps.println(decoder.decode(ByteBuffer.wrap(decoder.decode(ByteBuffer.wrap(msgBody.getBytes())).toString().getBytes()))); 
      ps.close(); 
      fo.close(); 
     } catch (CharacterCodingException e) { 
      e.printStackTrace(); 
     } 

이 코드는 창에서 작동합니다. 문제는 무엇이 될 수 있습니까? 리눅스 기계 디코더에서 문자열을 디코딩하지 않습니다.

+0

일종의 예외가 발생합니까? 파일에 가비지가 인쇄됩니까? 또한, 당신의 파일명은 상당히 Windows 특유의 것이지만, 리눅스가 당신의 현재 디렉토리에 이런 복잡한 이름으로 파일을 생성 할 수 있다고 확신합니다. – andri

+0

예외가 발생하지 않습니다. 파일을 생성하고'msgBody'의 복호화 된 문자열 대신'msgBody' 변수와 같은 것을 씁니다. –

답변

3

적어도 한 번 이상 을 사용하고있어 문제가 발생할 수 있습니다. (매우 긴 줄은 읽기가 어렵 기 때문에 여러 문장을 사용하면 이해하기 쉽습니다). 인코딩을 지정하지 않으므로 플랫폼 기본 인코딩을 사용합니다. 이 시점에서 플랫폼 의존성이 생겨서 문제가됩니다.

달성하려는 목표는 분명하지 않지만 플랫폼 별 동작에 대한 이유를 찾고 있다면 먼저 살펴 봐야합니다.

아, 그럴 경우 PrintStream과 같은 문제는 같은 인코딩을 사용하여 OutputStreamWriter을 만듭니다.

+0

getBytes()에서 "UTF-8"을 제공했지만 여전히 동일한 문제가 있습니다. –

+0

@HarryJoy : 당신이하고있는 일에 대해 설명하지 않은 것처럼 "같은 문제"가 무슨 뜻인지는 분명하지 않습니다. 덧붙여서'PrintStream' 사용 방법에 대해 알아 두십시오. 코드에서 계속 인코딩 및 디코딩이 * 많이 발생합니다. 문제는 그 중 하나 (또는 ​​여러 개)에있을 수 있습니다. –

+0

나는 그리스 단어를 디코딩하고 파일에 저장하려고합니다. 내 서블릿에서'ï £ YMMETOXH'라는 그리스어 단어를 얻고 있습니다. 위의 코드로 디코딩 할 때 리눅스 머신에서는 동일하게 유지되지만 윈도우에서는 잘 동작합니다. 나는 또한'OutputStreamWriter'로 시도했다. 이것은 또한 작동하지 않습니다. –