2017-12-18 5 views
-3

큰 텍스트 파일을 한 줄씩 처리하려면 다음 코드를 사용하고 있습니다. 문제는 영어가 아닌 크로아티아어를 정확하게 사용하고 있다는 것입니다. 많은 문자가 출력 파일에 appear로 표시됩니다. 이 문제를 어떻게 해결할 수 있습니까?새 파일에 저장할 때 이상한 문자를 출력하는 BufferedWriter

파일이 ANSI 형식이지만이 형식이 InputStreamReader와 호환 가능한 인코딩 형식으로 보이지 않습니다. 원본 파일을 어떤 인코딩 유형으로 저장해야합니까?

try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME))) { 

String line; 
try { 
    try (
    InputStream fis = new FileInputStream("C:\\Users\\marti\\Documents\\Software Projects\\Java Projects\\TwitterAutoBot\\src\\main\\resources\\EH.Txt"); InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); BufferedReader br = new BufferedReader(isr); 
) { 
    while ((line = br.readLine()) != null) { 
    // Deal with the line 

    String content = line.substring(line.lastIndexOf(" ") + 1); 
    System.out.println(content); 

    bw.write("\n\n" + content); 

    } 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

// bw.close(); 

} catch (IOException e) { 

e.printStackTrace(); 

} 
+1

입력 파일은 어떤 인코딩을 사용합니까? –

+0

@GregKopff ANSI입니다. – santafebound

+1

@MartinErlic 만약 'ANSI'라면, * 왜 *'UTF-8' **을 코드에 지정 했습니까? --- [ANSI] (https://en.wikipedia.org/wiki/ANSI_character_set) 인 경우 [확장 ANSI] (https://en.wikipedia.org/wiki/Extended_ASCII)의 특징은 다음과 같습니다. 그것? – Andreas

답변

1

당신은 Charset을 걸릴 InputStreamReader/OutputStreamWriter 생성자를 사용해야합니다. 사용중인 생성자가 플랫폼에 기본 charset을 사용하고 있는데, 이는 분명히 필요한 것이 아닙니다. 위의 자바 8을 사용하는 경우

, 당신은 Files에 편리한 방법 중 하나를 사용할 수 있습니다 :

당신은 확인해야합니다 charset을 지원하는 charset에 파일을 쓰는 것뿐만 아니라 올바른 charset으로 입력 파일을 읽는 것 당신이 쓰려고하는 커터들. UTF-8은 적절한 출력 파일 형식입니다.

0

파일이 ANSI으로 인코딩 되었기 때문에 UTF-8 대신 Cp1252으로 인코딩하여 해결했습니다.

관련 문제