2014-05-21 10 views
0

UTF-8로 변환하려는 Windows-1252 단어 문서가 있습니다. doc 파일을 pdf로 올바르게 변환하려면이 작업을 수행해야합니다. 이것은 내가 현재 그것을 할 방법은 다음과 같습니다 그러나문자를 올바르게 표시하지 않는 변환 된 워드 문서 (Windows-1252에서 UTF-8까지)

Path source = Paths.get("source.doc"); 
Path temp = Paths.get("temp.doc");  
try (BufferedReader sourceReader = new BufferedReader(new InputStreamReader(new FileInputStream(source.toFile()), "windows-1252")); 
     BufferedWriter tempWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(temp.toFile()), "UTF-8"))) { 
     String line; 
     while ((line = sourceReader.readLine()) != null) { 
      tempWriter.write(line); 
     } 
    } 

, 내가 Word에서 변환 된 파일 (temp.doc)을 열 때, 올바르게 일부 문자를 표시하지 않습니다. Ü은 예를 들어 ¼이 될 것입니다.

어떻게 해결할 수 있습니까? 새로운 BufferedReader (UTF-8 인코딩 사용)를 만들고 temp을 읽으면 문자가 IDE의 콘솔에 올바르게 표시됩니다.

+1

사이드 댓글 :'Files.newBufferedReader'와'Files.newBufferedWriter'를 사용하면 코드가 훨씬 간단 해집니다 :) –

답변

2

나는 텍스트 파일 아니에요 윈도우 1252 워드 문서

있습니다. Word 문서는 기본적으로 이진 데이터입니다. 일반 텍스트 편집기로 열면 모든 종류의 횡설수설을 볼 수 있습니다. 거기에 텍스트가 표시 될 수도 있지만 기본적으로는 이 아니며은 읽지 않으려는 일반 텍스트 파일이 아닙니다.

"Windows-1252 워드 문서"의 의미는 분명하지 않습니다 ... Word는 내부적으로 원하는 인코딩을 사용하며,이를 제어 할 수 있는지 확신하지 못합니다. 난 "워드 프로세서"문서를 처리하는 모든 괜찮은 "doc에 PDF"를 기대합니다.

UTF-8 인코딩을 사용하여 새 BufferedReader를 만들고 temp를 읽으면 문자가 IDE의 콘솔에 올바르게 표시됩니다. 그런 경우에는

는, 그게 이 아닌 Word 문서로 시작하는 일반 텍스트 파일입니다 제안합니다. 매우이어야합니다. Word 문서 또는 일반 텍스트 파일을 가지고 있어야합니다. 그것들은 똑같은 것이 아니며 같은 방식으로 다루어서도 안됩니다.

+0

나는 JODConverter를 사용하여 PDF로 변환합니다. 내 원본 문서를 직접 변환하려고하면 PDF에는 텍스트 편집기로 단어 문서를 열 때 표시되는 내용이 포함됩니다. 횡설수설. 그러나 단어 문서의 charset을 먼저 변경하면 이전에 언급 한 특정 문자를 제외하고는 더 정확하게 변환됩니다. 단어 문서입니다. BufferedReader를 사용하여 변환 된 파일을 다시 읽으면 횡설수덕하지만 정확한 문자 (예 : Ü)가 인쇄됩니다. – bortdc

+1

@bortdc : Word 문서 또는 일반 텍스트와 함께 시작한 것은 아직 명확하지 않습니다. 소스 문서가 무엇인지에 중점을 두어 PDF 부분을 잊어 버리십시오. 그것이 진정으로 Word 문서라면 (평범한 텍스트 편집기에서 열면 횡설수 조적 현상을 보입니다.) 그렇다면'BufferedReader'로 전체를 읽는 접근 방식을 포기해야합니다. 아마도 다른 변환기를 사용해보십시오. 그건 그렇고, "단어 문서의 문자 세트를 처음 변경하면"무슨 뜻인지는 분명치 않습니다. –

-1

이 UTF-8 인코딩을 사용하도록 Excel을 강제로, 나는 (기타 콘텐츠 전) 바이트 순서 표시를 사용 :이 도움이

tempWriter.write('\uFEFF'); // byte order mark to let Excel know to expect UTF-8 

희망을!