-1
TextOut()
を使用して標準ASCII文字列を画面に表示しているプログラムがあります。 Shift-JISでエンコードされた文字列を出力する機能を追加したいと考えています。 TextOut()
にShift-JIS文字列を印刷したいとか、別の機能をすべて使用する必要がありますか? TextOutのドキュメンテーションはエンコーディングについて言及していないようです。TextOut()とShift-JIS(日本語文字)
FYI:私のプログラムは現在MS Visual Studio 2015でコンパイルされており、「文字セット」は「複数バイト文字セットを使用」に設定されています。
Windows APIがどのようにエンコーディングを処理するのかを知る必要があります。実行されるプロセスにはANSIエンコーディングがあり、IIRCはプログラムが実行されているWindowsの特定のインストールによって決定され、何でも(Shift-JISを含む)、「Unicode」または「Wide」エンコーディングUTF-16です。あなたがしたいことは、 'MultiByteToWideChar()'を使ってShift-JISをUTF-16に変換し、 'TextOutW()'を使ってUTF-16文字列を描くことです。これは、構成に関係なく、どのWindowsシステムでも機能します。 – andlabs
私は自分の英語版のWindows PCと、日本のPCを日本で使っています。あなたは、私はPCがどのように設定されているかに応じて、違うやり方をする必要があると言っていますか? – Mick
マルチバイト文字セットオプションを使用しているとします。 Unicodeを変換し、Unicodeを必要とする最新のWindows API( 'W'接尾辞付きの関数、' #define UNICODE'と '#define _UNICODE'、そして必要なVSプロジェクトオプション)を使用すれば、あなたの人生はより簡単になります。 'MultiByteToWideChar()'と 'WideCharToMultiByte()'はいずれもコードページとして932を渡してShift-JISをサポートしています。 (これらの名前は定数のようには思われません...) – andlabs