5

他の言語のコンテンツが含まれている可能性のあるWord2003+によって生成されたRTF1.5+ファイルを解析しています。このコンテンツは通常、16進リテラル(\'xx)としてエンコードされます。これらのリテラルをUnicode値に変換したいと思います。

ansicpg(\ ansi \ ansicpg1252)を探すことで、自分のドキュメントのコードページを知ることができます。

ansicpgコードページを使用してUnicodeにデコードすると、多くの言語(フランス語など)が期待するUnicode文字値に変換されるようです。

ただし、ロシア語のテキスト(以下のような)を見ると、コードページ1252はコンテンツをジバーリッシュにデコードします。

\ f277 \ lang1049 \ langfe1033 \ langnp1049 \ insrsid5989826 \ charrsid6817286 \'d1 \'f2 \'f0 \'e0 \'ed \'e8 \'f6 \'fb \'e1 \'e5 \'e7 \'ed \ ' e0 \'e7 \'e2 \'e0 \'ed \'e8\'ff。\'dd \'f2 \'e0 \'f1 \'f2 \'f0 \'e0 \'ed \'e8 \'f6 \'e0 \'ed \'e5 \'e4 \'ee \'eb \ ' e6 \'ed \'e0 \'ee \'f2 \'ee \'e1 \'f0 \'e0 \'e6 \'e0 \'f2 \'fc \'f1 \'ff \'e2 \'f2 \ 'e0 \'e1 \'eb \'e8 \'f6 \'e5 \'e2 \'f1 \'ee \'e4 \'e5 \'f0 \'e6 \'e0 \'ed \'e8 \'e8 。

lang1049、langfe1033、langnp1049が手がかりを提供してくれるので、それらが参照するテキストに対してプログラムで別の(デフォルト以外の)コードページを選択できると思いますか?もしそうなら、lang *コードをコードページにマップする方法を説明する情報はどこにありますか?または、探している情報を提供するために、他のRTFコマンド/ディレクティブを探す必要がありますか?(または、フォント参照として\ f277を使用して、関連するコードページがあるかどうかを確認する必要がありますか?)

4

2 に答える 2

3

\lang実際には、テキストの特定の部分を特定の言語であるとマークアップするだけであり、古い非Unicode\'エスケープに使用されるコードページに影響を与えるべきではありません。

ヘッダーに\ansicpgトークンを入れることでおそらくそれができるはずですが、Wordでは無視されているようです(生のバイトと\'エスケープの両方について)。

または、フォント参照として\ f277を使用して、関連するコードページがあるかどうかを確認する必要がありますか?

そのように見えます。とにかく、特定のテキスト範囲に割り当てられたフォントを変更\fcharsetすることが、Wordにバイトの処理方法を変更させる唯一の方法です。このトークンのコード(リストについては、ここを参照)は、さらに悪いことに、言語IDまたはコードページ番号とは異なります。

于 2010-09-24T15:44:14.150 に答える
1

それほど明確ではありませんが、MSDNに従ってRTFをUTF-8形式に変換するためにRichEditコントロールを使用できます:http: //msdn.microsoft.com/en-us/library/windows/desktop/bb774304( v = vs.85) .aspxEM_STREAMOUTメッセージのSF_USECODEPAGEを確認してください。

于 2011-10-19T13:12:49.907 に答える