トップページ > 記事閲覧
DX_CHARCODEFORMAT_UTF8の時のstd::stringについて
名前:masa101 日時: 2023/11/11 10:44

Steam向けのゲームを作成しています。 ローカライズの関係でソースコードをUTF-8、DxLib_Initの前にSetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 )を呼んでいます。 PNGファイルのパスをstd::stringに格納してLoadGrapで読み込ませたり、 DrawStringで表示させようとしたときに、 フォルダパスに日本語が含まれているとエラーになります。 std::filesystemでフォルダ内のファイル一覧を取得して順次処理を行おうとしたときに発生しました。 ・SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 )を呼ばなければエラーは出ません。 ・文字リテラルu8を付ければエラーになりません。 以下、ソースの抜粋です。 std::string file = "Players\\キャラクタ1.png"; int hdl = LoadGraph( file );  // ここで読み込みエラー std::filesystem::path filePath = file; std::string fileName = filePath.filename().string(); DrawGraph( x, y, hdl , true ); DrawString( x, y + 130, fileName.c_str(), 0xffffff );  // 日本語が表示されない UTF-8で日本語に対応するにはどのように記述すれば教えていただけると助かります。
メンテ

Page: 1 |

Re: DX_CHARCODEFORMAT_UTF8の時のstd::stringについて ( No.1 )
名前:管理人 日時:2023/11/12 02:46

SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); を使用する場合は、 LoadGraph や DrawString などの文字列を扱う関数に渡す文字列の文字コードを UTF-8 にする必要がありますので、masa101さんも試されたように文字列リテラルの先頭に u8 を記述するようにしてください m(_ _)m ( "" の先頭に u8 が記述された文字列リテラルの文字コードは UTF-8 になりますので ) std::string file = u8"Players\\キャラクタ1.png"; int hdl = LoadGraph( file ); std::filesystem::path filePath = file; std::string fileName = filePath.filename().string(); DrawGraph( x, y, hdl , true ); DrawString( x, y + 130, fileName.c_str(), 0xffffff ); 
メンテ

Page: 1 |

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

   クッキー保存