Microsoft Word文書を開き、内部のすべてのテキストを読み取り、そのデータを外部システムに送信して処理するアプリケーションを作成しました。これは以前は問題なく機能していましたが、Unicodeを受け入れるようになったため、Wordドキュメントの読み取りで問題が発生しました。
私たちが目にしている問題は、(サロゲートペア)やā(書記素クラスター)など、複数のコードユニットを占める文字を表示できないことです。を表示しようとすると、2つの??が得られ、ā̈を使用すると、書記素を構成する個々の文字が得られます。
これらの文字がこのように返されるのは、ファイルを正しく読み取っていないためだと感じています。しかし、私は探していて、まだ解決策を見つけていません。
次の1つの値のみを含むWordドキュメントを作成しました。
コードで最初に行うことは、ファイルをバイト配列に読み込むことです。
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
wordDocument = new byte[fileStream.Length];
fileStream.Read(wordDocument, 0, (int)fileStream.Length);
fileStream.Close();
バイト配列をさらに調査すると、次の値が含まれています。
{63, 63, 10, 13}, or in hex {0x3f, 0x3f, 0x0d, 0x0a}
16進値を調べて、0x3fが?に関連していることを知りました。これは、2つの??を取得する理由を説明しています。
次に、データを文字列に変換しようとすると、2つが返されますか?
textdata = System.Text.Encoding.Unicode.GetString(wordDocument);
問題はドキュメントの読み方にあると思いますが、100%確信はありません。誰かが私を正しい道に導くことができますか?