0

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%確信はありません。誰かが私を正しい道に導くことができますか?

4

1 に答える 1

0

MS Office Primary Interop Assemblyを使用して、Word文書のオブジェクトモデルにアクセスできます。Visual Studioでアセンブリ参照を追加してみてください(Office12やMicrosoftWord 12など)。このリンクをチェックしてください。そこにはいくつかの基本があります。

于 2012-12-17T17:53:35.887 に答える