RTFヘックスリテラルをUnicodeに変換するときに使用するコードページを発見する方法

StackOverflow https://stackoverflow.com/questions/3787837

質問

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

ANSICPG( ansi ansicpg1252)を探して、ドキュメントのコードページを知っています。

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

ただし、ロシア語のテキスト(以下のように)を見ると、CodePage 1252はコンテンツをJibberishにデコードします。

f277 lang1049 langfe1033 langnp1049 insrsid5989826 charrsid6817286 'd1 ' f2 'f0 ' e0 'ed ' e8 'f6 ' e1 'e1 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をフォントリファレンスとして使用し、関連するコードページがあるかどうかを確認する必要がありますか?)

役に立ちましたか?

解決

\lang 実際には、テキストの特定のストレッチを特定の言語であるとマークするだけであり、古い非ユニコードに使用されるコードページに影響を与えるべきではありません \' 脱出。

パッティング \ansicpg ヘッダーのトークンはおそらくそれを行う必要がありますが、単語では無視されているようです(生のバイトの両方について \' 脱出。

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

それはそのように見えます。変更 \fcharset とにかく、特定のテキストに割り当てられた特定のテキストに割り当てられたテキストに割り当てられたのは、バイトの扱い方を変えるために言葉を得ることができる唯一の方法です。このトークンのコード(例を参照 ここ リストの場合)は、言語IDまたはコードページ番号のいずれかと再び異なります。

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top