2013-08-07 2 views
1

독일어 웹 사이트에서 일부 일반 텍스트 파일을 다운로드했지만 인코딩이 무엇인지 잘 모릅니다. 파일에 바이트 마커가 없습니다. 파일이 UTF8로 인코딩되어 있다고 가정하는 파서를 사용하므로 특정 악센트 부호가있는 문자 (바이트 범위> 127)를 적절하게 처리하지 못합니다.독일어 문자가있는 ANSI 파일을 UTF8로 변환

UTF8로 변환하고 싶습니다. 이 작업을 올바르게 수행하려면 인코딩을 알아야합니다.

다른 사람들이 이러한 파일을 처리하는 방식은 수동으로 Windows 메모장에서 열고 UTF8로 다시 저장하는 것입니다. 이 프로세스는 악센트 부호가있는 문자를 유지하므로 가능한 경우 Windows 메모장을 사용하지 않고이 변환을 자동화하고 싶습니다.

Windows 메모장에서 UTF8로 변환하는 방법을 어떻게 알 수 있습니까?
파일을 UTF8 (Java 6)으로 변환하려면 어떻게해야합니까?

+0

독일어 웹 사이트는 종종 ISO-8859-1 또는 -15로 인코딩됩니다. 클립 보드를 통해 이동하면 문자가 현재 OS의 현재 인코딩 스타일로 변환됩니다. – reporter

+0

예, iso-8859-1이 아마도 도움이 될 것입니다. – AKDADEVIL

답변

2

Java 7에서는 "Windows-1252"라는 텍스트를 가져오고 Windows Latin-1입니다.

Path oldPath = Paths.get("C:/Temp/old.txt"); 
Path newPath = Paths.get("C:/Temp/new.txt"); 
byte[] bytes = Files.readAllBytes(oldPath); 
String content = "\uFEFF" + new String(bytes, "Windows-1252"); 
bytes = content.getBytes("UTF-8"); 
Files.write(newPath, bytes, StandardOption.WRITE); 

바이트를 사용하여이를 Windows Latin-1로 해석합니다. 그리고 NotePad에 대한 트릭 : NotePad는 선행 BOM 마커 문자로 인코딩을 인식합니다. UTF-8에서는 일반적으로 사용되지 않는 너비가없는 공간입니다.

그런 다음 String에서 UTF-8 인코딩을 사용합니다.

Windows-1252는 ISO-8859-1 (순수한 라틴어 -1)이지만 0x80 - 0xBF 범위의 쉼표 따옴표와 같은 일부 특수 문자가 있습니다. 자바 6에서


:

File oldPath = new File("C:/Temp/old.txt"); 
File newPath = new File("C:/Temp/new.txt"); 
long longLength = oldPath.length(); 
if (longLength > Integer.MAX_VALUE) { 
    throw new IllegalArgumentException("File too large: " + oldPath.getPath()); 
} 
int fileSize = (int)longLength; 
byte[] bytes = new byte[fileSize]; 
InputStream in = new FileInputStream(oldPath); 
int nread = in.read(bytes); 
in.close(); 
assert nread == fileSize; 

String content = "\uFEFF" + new String(bytes, "Windows-1252"); 
bytes = content.getBytes("UTF-8"); 

OutputStream out = new FileOutputStream(newPath); 
out.write(bytes); 
out.close(); 
+0

제가 개발중인 Java 버전을 지정하기 위해 질문을 업데이트했지만 Java 7 응답은 다른 사람들에게 유용 할 수 있습니다. – MxyL

+0

오케이'java -'. –

관련 문제