VisualStudioで記述された非UnicodeのC++アプリケーションがあります。これは、元々、コードページ1252の文字セットを使用するマシン用に記述されたものです。
このアプリケーションは、リソースを読み取った後、一部のファイルでリソース文字列を検索するなど、リソースのコンテンツに対して多くの後処理ステップを実行します。
現在、中国の人々はこのアプリケーションを使い始めており、彼らのマシンはPRCロケールを使用しています(これにより、非Unicodeアプリケーションのデフォルトのコードページがマルチバイト文字セットである936に設定されます)。
CString::LoadString
変換を実行するようです。他のファイルで探しているコンテンツが同じではないため、これにより以降の処理が中断されます。
同じことがCMenu::GetMenuString
またはにも当てはまりCWnd::GetWindowText
ます。
iconv
残念ながら、ファイルを単純に使用することはできません。 LoadString
、GetMenuString
または次のGetWindowText
ように動作します。
- コードページ1252で有効な一部の文字は、コードページ936では無効であり(たとえば、î、û、ñ、œ)、疑問符に置き換えられます。
- コードページ1252で有効な一部の文字は、コードページ936では無効です(例: É)が、代替文字に置き換えられます(É=>é)
- 一部の文字は両方のコードページに存在しますが、同じ表現ではなく、CP936では2バイトであることがよくあります
- 一部の文字(すべてのASCII文字を含む)は、両方のコードページで一致します。
リソースコンテンツをロードするこれらの3つの関数は、文字セット変換を実行せずに、バイナリコンテンツをロードするようにしたいと思います。.rc
でファイルを変更しようとしましLANGUAGE LANG_INVARIANT, SUBLANG_NEUTRAL
たが、何も変更されませんでした。
リソースファイルには#pragma code_page(1252)
;も含まれています。これは安全に削除できますか?そのプラグマは何のためですか?
ご回答ありがとうございます。