2012-12-17 2 views
0

Microsoft Word 문서를 열고 내부의 모든 텍스트를 읽고 해당 데이터를 처리하기 위해 외부 시스템으로 보냅니다. 과거에는 괜찮 았지만 유니 코드를 받아 들였기 때문에 Word Documents를 읽는 데 문제가있었습니다.MS Word 문서에서 SurrogatePairs 가져 오기

우리가보고있는 문제는 (Surrogate Pair) 또는 â̈ (Grapheme Cluster)와 같이 하나 이상의 코드 단위를 차지하는 문자를 표시 할 수 없다는 것입니다. 우리가를 표시하려고 할 때, 우리는 두 개를 얻습니다. 그리고 ā with와 함께, 우리는 각자의 문자를 만들어냅니다.

필자는 파일에서 제대로 읽지 못하기 때문에 이러한 문자가 반환 된 이유를 알 수 있습니다. 그러나 나는 수색 해왔고 아직 해결책을 찾지 못했다.

단일 값만 포함 된 Word 문서를 만들었습니다. 찾는에서

{63, 63, 10, 13}, or in hex {0x3f, 0x3f, 0x0d, 0x0a} 

: 바이트 배열의 추가 조사시

FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); 

wordDocument = new byte[fileStream.Length]; 
fileStream.Read(wordDocument, 0, (int)fileStream.Length); 

fileStream.Close(); 

는 다음과 같은 값을 포함합니다 :

우리가 코드에서 할 첫 번째 일은 바이트 배열로 파일을 읽어 16 진수 값, 나는 0x3f가?와 관련이 있다는 것을 배웠습니다. 왜 우리가 두 개를 얻었는지 설명합니다. "

그런 다음 데이터를 문자열로 변환하려고 시도하면 두 개가 다시 나옵니다.

textdata = System.Text.Encoding.Unicode.GetString(wordDocument); 

문제는 우리가 문서를 읽는 방법과 관련이있을 수 있지만 100 % 확실하지는 않습니다. 누군가 올바른 경로로 안내 할 수 있습니까?

+0

Word 문서는 일반 텍스트가 아닙니다. – SLaks

+0

맞아, 내 생각은 내가 그 두 배가 돌아 왔을 때 였어 ?? Surrogate Pair 대신에 질문은 Word 문서에서 모든 데이터를 올바르게 가져 오는 방법입니다. –

+0

Word 파일 형식 (.doc 또는 .docx)에 대한 파서를 작성해야합니다. 쉬운 일이 아닙니다. – SLaks

답변

0

MS Office 기본 Interop 어셈블리를 사용하여 Word 문서의 개체 모델에 액세스 할 수 있습니다. Visual Studio에서 어셈블리 참조를 추가하십시오 (Office 12 또는 Microsoft Word 12 등). this link을 확인하십시오. 거기에 몇 가지 기본 사항이 있습니다.

관련 문제