2011-11-03 2 views
1

그래서 기본적으로 ISO-8859-2 문자를 Windows-1250 문자로 변환하려고합니다. 불행히도 자바 인코더/디코더 클래스 중 어느 것도 내 문제를 해결하지 못했습니다. 내가 지금 뭘하는지Java 문자 변환

입니다 :

str = str.replace("ń", new String(new char[]{241}));

그것은 실제로 순서를 변환,하지만 올바른 문자.

-59, -124 (N)는, -61, -79된다가 될 예정되지 않은 하나 또는 241 -24?

답변

5

자바 문자열을 한 인코딩에서 다른 인코딩으로 변환하려는 것은 근본적으로 잘못되었습니다. 문자열은 인코딩을 사용하지 않고 문자를 추상화합니다 (주로 대부분).

자바에서는 바이트와 문자열 사이의 변환을위한 요리법을 인코딩합니다. ISO-8859-2에서 windows-1250으로 변환하려면 바이트로 시작하여 ISO-8859-2를 사용하여 문자열로 변환하고 다시 windows-1250을 사용하여 바이트로 변환해야합니다. InputStreamReader/Writer 또는 new String(bytes, encoding)string.getBytes(encoding)

3

문자열 내 인코딩은 항상 동일하므로 (UTF-16) 코드가 혼동 될 수 있습니다. 한 문자를 다른 문자로 바꾸고, 인코딩을 변환하지 않습니다.

또한이 코드는 소스 파일의 인코딩에 따라 다릅니다. "ń"대신 "\ u0144"를 사용하는 것이 좋습니다.

str.getBytes("Cp1250") 
2

에코 잉고의 대답처럼, 바이트 문자열을 변환 할 때

인코딩이 실현된다. 아마 코드의 덩어리는 무슨 일이 일어나고 있는지 설명 할 것이다 :

String defCharset = "ń"; 
String[] names = { "UTF-16BE", "UTF-8", "ISO-8859-2", "windows-1250" }; 
for(String name : names) { 
    byte[] bytes = defCharset.getBytes(name); 
    for(int i = 0; i < bytes.length; i++) { 
     System.out.printf("%s [%d]=%d\n", name, i, (int)(bytes[i] & 0xff)); 
    } 
} 

당신이 정말 사람이 ISO-8859-2 문자를 제공한다 요청해야하고, 누가 창문-1250 문자를 소비하고 싶어? 그런 다음 인코딩 된 바이트 []를 어떻게 처리할까요?