2015-01-13 7 views
1

Java에서 파일이 ANSI 또는 UTF-8인지 여부를 감지하는 방법이 있습니까? 내가 가진 문제는 누군가 Excel에서 CSV 파일을 만들면 UTF-8이라는 것입니다. 메모장을 사용하여 작성하는 경우 ANSI입니다.Java가 파일이 UTF-8인지 또는 Ansi인지 감지합니다.

내가 파일 유형을 감지하여 적절하게 처리 할 수 ​​있는지 궁금합니다.

감사합니다.

+1

에서 UTF-8 바이트 순서 표시 및 인코딩 검출에 대한 일부 자세한 내용은이 도움말을합니까? https://code.google.com/p/juniversalchardet/ –

+0

확인 : http://stackoverflow.com/questions/3759356/what-is-the-most-accurate-encoding-detector –

+0

일부 코드를 제공 할 수 있습니까? 그냥 링크? – user1158745

답변

1

다음과 같이 시도해 볼 수 있습니다. 그것은 BOM (Byte Order Mark)을 포함하여 Excel에 의존합니다. BOM (빠른 검색은 그것을 검증 할 수는 없지만 자바는 BOM을 특정 "문자"로 취급합니다. \uFEFF).

FileInputStream fis = new FileInputStream(file); 
BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8")); 

String line = br.readLine(); 
if (line.startsWith("\uFEFF")) { 
    // it's UTF-8, throw away the BOM character and continue 
    line = line.substring(1); 
} else { 
    // it's not UTF-8, reopen 
    br.close(); // also closes fis 
    fis = new FileInputStream(file); // reopen from the start 
    br = new BufferedReader(new InputStreamReader(fis, "Cp1252")); 
    line = br.readLine(); 
} 

// now line contains the first line, and br.readLine() will get the next 

http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8