2012-10-29 2 views
1

파일의 인코딩 양식을 다른 것으로 변경하고 싶습니다 (상관 없습니다). 하지만 결과 (파일 w.txt)로 파일을 열면 내부가 엉망입니다. Windows가 올바른지 이해하지 못합니다.파일 인코딩을 변경 한 후 Windows가 잘못되었습니다.

어떤 결과 인코딩을해야합니까 (args [1]) 그래서 그것은 Windows 메모장에 의해 올바른 해석됩니까?

import java.io.*; 
import java.nio.charset.Charset; 

public class Kodowanie { 

    public static void main(String[] args) throws IOException { 
     args = new String[2]; 
     args[0] = "plik.txt"; 
     args[1] = "ISO8859_2"; 
     String linia, s = ""; 
     File f = new File(args[0]), f1 = new File("w.txt"); 
     FileInputStream fis = new FileInputStream(f); 
     InputStreamReader isr = new InputStreamReader(fis, 
       Charset.forName("UTF-8")); 
     BufferedReader in = new BufferedReader(isr); 

     FileOutputStream fos = new FileOutputStream(f1); 
     OutputStreamWriter osw = new OutputStreamWriter(fos, 
       Charset.forName(args[1])); 
     BufferedWriter out = new BufferedWriter(osw); 
     while ((linia = in.readLine()) != null) { 
      out.write(linia); 
      out.newLine(); 
     } 
     out.close(); 
     in.close(); 

    } 

} 

입력 :

Ala 
ma 
Kota 

출력 : '?'는이 왜

?Ala 
ma 
Kota 

+0

파일이 엉망인 것을 어떻게 알 수 있습니까? 파일 뷰어가 파일 인코딩을 지원합니까? –

+1

아마도? 유니 코드 인코딩으로 저장/생성 된 파일의 BOM (Byte Order Mark)이 있음을 나타냅니다. –

답변

1

Windows의 기본 인코딩은 Cp1252입니다.

+0

하지만 Charset.forName ...이 것을 모릅니다. – user1769735

+1

'Charset.forName ("windows-1252")'를 사용하십시오. [JDK에서 지원하는 인코딩] (http://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html) –

+1

Cp1252는 ISO-8859-1의 하위 집합입니다. 시도해보십시오. 그 중 하나가 – thedayofcondor

1

US-ASCII는 유니 코드의 하위 집합입니다 (아주 작습니다). UTF-8로 파일을 읽은 다음 US-ASCII로 다시 씁니다. 따라서 주어진 UTF 문자를 축소 된 7 비트 US-ASCII 하위 집합으로 표현할 수 없으면 인코더가 필요합니다. Clasically, 이것은?과 같은 기본 charcter에 의해 repaced됩니다.

US-ASCII는 7 비트 길이이지만 UTF-8의 문자는 많은 경우 멀티 바이트입니다. 즉, 바이트 127 위의 모든 유니 코드 문자는 US-ASCII로 표현할 수 없습니다. 그 파일이 변환되면 볼 수있는 물음표를 설명 할 수 있습니다.

비슷한 질문에 대답했습니다. Reading Strange Unicode Characters in Java. 아마도 도움이 될 것입니다.

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)을 읽어 보시기 바랍니다.

+0

을 참조하십시오. 코드에 실수가 있습니까? – user1769735

+1

@ user1769735 문제는 코드에는 없지만 데이터 또는 데이터 조작 방법에 대한 아이디어에 있습니다. 읽고있는 파일을 누가 만들었습니까? 너 자신 또는 다른 사람? 파일을 만들 때 사용한 인코딩은 무엇입니까? –

+0

나 한테. 다른 이름으로 저장을 사용하고 UTF-8을 선택했습니다. – user1769735

관련 문제