トップページ > 記事閲覧
月並みな質問ですが文字コードについて
名前:匿名 日時: 2022/01/24 12:19

これはDXライブラリに直接に関連する質問ではありません。 VS2017です。指示に従って マルチ バイト文字セットを使用する にしています。 私の場合、utf8で書かれた設定テキストファイルを読んでライブラリを使います。 DrawString()は何とか成功しました。日本語も外国語も表示できます。 しかしながら、例えばライブラリ付属のtest1.bmpを使うために C:\DxLib_VC\サンプルプログラム実行用フォルダ\test1.bmp を指定すると GraphHandle = LoadGraph( ファイル名 ) ; で読み込めません。 "\"を"\\"にするとか試しましたが。 日本語部分を英数字にすると問題ありませんし、カレントディレクトリにtest.bmpを移動させて"test1.bmp"でもいいです(現状、実際にそうしています)。 他のプログラムでも同様にutf8を使うのですが、設定を Unicode 文字セットを使用する にしてMultiByteToWideChar()という関数を使うとwchar_tという型になり不都合はありません。もちろんMessageBoxAとかではなくMessageBoxWとかを使います。Windows標準のutf16にするようです。 DXライブラリ使用時にはメッセージ系は別に画面にDrawString()等で表示するのでいいのですが、せめてパス指定に日本語が含まれている場合でも成功できるように変換できないですか。このままだとDXライブラリのサンプルを試すときに毎回対象ファイルをカレントディレクトリにコピーしなくてはなりません。 色々調べたのですが、どうやっても成功しませんでした。
メンテ

Page: 1 |

Re: 月並みな質問ですが文字コードについて ( No.1 )
名前:管理人 日時:2022/01/25 22:28

Visual C++ では文字列リテラルを utf8 にしたい場合は文字列を囲う "" の前に u8 を追加して u8"Test String" のようにする必要があります DxLib_Init の呼び出し前に SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); を実行してDXライブラリで扱う文字コードを utf8 に 変更した上で、全角文字も含まれるファイルパスの画像を画面に表示するプログラムを組んでみましたので、よろしければ参考にしてください #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // 使用する文字コードを utf8 に設定 SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ) ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 画面に画像を表示する LoadGraphScreen( 0, 0, u8"D:\\DxLib_VC\\サンプルプログラム実行用フォルダ\\test1.bmp", TRUE ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ
Re: 月並みな質問ですが文字コードについて ( No.2 )
名前:tk-xleader 日時:2022/01/25 22:37

WindowsでDXライブラリを使用する場合、char型の文字列の文字コードは実行環境のデフォルトのコードページに基づいて解釈されるので、UTF-8に固定するには、 SetUseCharCodeFormat(DX_CHARCODEFORMAT_UTF8); を呼び出して、DXライブラリ内部の文字コードをutf-8に変更する必要があります。 もっとも、これだけではchar型の文字列リテラルの文字コードはコンパイル環境のコードページ(日本語Windowsではs-jis)のままとなってしまいます。 そのため、文字列リテラルの先頭にu8を付加して、 GraphHandle = LoadGraph(u8"C:\DxLib_VC\サンプルプログラム実行用フォルダ\test1.bmp"); のようにするか、あるいは、プロジェクトの「プロパティ」->「構成プロパティ」->「C/C++」->「コマンドライン」のシートの追加のコマンドラインの項目に、 /execution-charset:utf-8 と入力して、Visual C++コンパイラにchar型文字列リテラルの文字コードをutf-8にするオプションを指定します(ttps://docs.microsoft.com/en-us/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=msvc-150)。 こうすれば、文字列リテラルの文字コードをutf-8にすることが可能です。 <余談> ms2017はC++20に対応しないため関係ありませんが、u8リテラルの文字型は、C++20以降はchar型ではなくなる(char8_tという新しい型になる)ため、後者の方法によってchar型リテラルの文字コードを明示的に指定する方がいいかもしれません。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存