2015-02-05 1 views
0

나는이 난에서의 InputStream을 프로세스를 반환인코딩이 작동하지 않는 이유는 무엇입니까? (UTF-8, 문자열, 자바)

Runtime.getRuntime().exec("ping google.de"); 

을 사용하여 명령을 실행하고 있습니다. 그리고 나는

System.out.println(reader.readLine()); // The returned String of readLine() 
// is used to create a javafx.scene.text.Text in my application 

그것을 인쇄 할 할 경우 BuffredReader에게

BufferedReader(new InputStreamReader(processInputStream, "UTF-8")); 

를 초기화 '?' 'ü', 'ä'또는 'ö'와 같은 문자 대신에
문장은 "이 문자 - 작동하지 않을 것입니다"는 "이 문자 ---- 작동하지 않습니다"로 인코딩됩니다.
이러한 문자를 올바르게 인코딩하는 방법은 무엇입니까?

감사합니다, Basti는
는 추신 : 네,이 질문은 몇 번을 요청하고있다,하지만 난 내 경우

+0

인쇄 대상이 어디까지 망가 트니까? 인쇄 한 글자 당 물음표가 하나 표시되면 멀티 바이트 UTF-8 코드가 올바르게 단일 문자로 디코딩됩니다. –

+0

목표가 무엇입니까? 잘못된 인코딩이 발생하는 idk. 프로세스의 입력 스트림은 바이트만을 스트림합니다. inputstreamreader는 uft-8로 인코딩해야하지만 그렇지 않습니다. BufferedReader는 system-lineseper가 발견 될 때까지 문자 만 리턴합니다. 실패한 inputstreamreader입니까? – Basti

+0

@McDowell 나는 내 readingMethod에 디버깅을했고 readLine()은 이미 '?'가 포함 된 String을 반환합니다. println()이 아닙니다. – Basti

답변

0

InputStreamReader 의 인코딩을 해결할 수있는 스레드를 찾을 수 없습니다 알고는 인코딩을 지정합니다 들어오는 바이트 스트림을 인코딩하여 인코딩과 독립적 인 Java 문자열 인스턴스로 올바르게 변환 할 수 있습니다. 따라서 명령이 실행되는 명령 행 환경의 인코딩과 일치해야합니다. 귀하의 경우에는 Windows 명령 셸의 인코딩입니다.

내 경험에 비추어 볼 때 Windows 환경에서 적절한 인코딩은 "CP850"일 가능성이 높습니다.

BufferedReader(new InputStreamReader(processInputStream, "CP850")); 
+0

System.setProperty ("file.encoding", "UTF-8")를 사용하여이 문제를 해결할 수 있습니까? ? – Basti

+0

Charset.defaultCharset()을 인코딩 charset으로 사용하면 작동하지 않습니다. 여전히 '?' – Basti

+0

"CP850"에서 작동 했습니까? 'System.setProperty()'는 Windows 셸이 아니라 자바 환경의 인코딩을 설정하므로 도움이되지 않습니다. 'Charset.defaultCharset()'는 Java 환경의 인코딩을 쿼리하기 때문에 작동하지 않습니다. Java 환경의 인코딩은 일반적으로 기본 OS의 인코딩과 같습니다. 그러나 Windows의 명령 행 셸에는 또 다른 인코딩이 있습니다. – Codo

관련 문제