トップページ > 記事閲覧
UTF-8とshift-jisの互換性
名前:Carbon 日時: 2025/09/04 09:39

C++のstd::stringとDxLibのDrawStringを用いて script.jsonから文字列データ(日本語の文字列を含む)を読み込んで Abort() has been called. と警告のポップアップが表示されてしまいます. 追加です 使用ライブラリはnlohmannです struct Dialog { int speakerId; std::string line; }; main.cpp std::vector<Dialog> dialogData = LoadDialog("script.json"); // この一行をコメントアウトすると問題なく実行できるようになります. std::vector<Dialog> LoadDialog(const std::string& filename) { std::ifstream ifs(filename); json j; ifs >> j; std::vector<Dialog> _dialog{ }; for (auto& e : j) { Dialog d; d.speakerId = e["speakerId"].get<int>(); d.line = e["line"].get<std::string>(); _dialog.push_back(d); } return _dialog; } script.json [ { "speakerId" : 4, "line" : "他の隠し要素も見つけてみてほしいな" }, { "speakerId" : 5, "line" : "スペースキーで戻る" }, { "speakerId" : 5, "line" : " " } ] script.jsonをShift-JISで保存したため警告が出たのでしょうか? DxLibでUTF-8を用いようとするならstd::u8stringを用いるべきでしょうか?
メンテ

Page: 1 |

Re: UTF-8とshift-jisの互換性 ( No.1 )
名前:Carbon 日時:2025/09/04 19:05

追加です, どうやらAbort()のエラーはnlohmannに由来するものでした script.jsonをUTF-8で保存したところ解決できました しかし, 依然としてprintfDx();やDrawFormatString();ではUTF-8の文字列が出力できません.
メンテ
Re: UTF-8とshift-jisの互換性 ( No.2 )
名前:管理人 日時:2025/09/06 01:31

WinMain 関数の最初に SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); という記述を追加していただくとDXライブラリが UTF-8 対応になります ただ、DrawFormatString や printfDx 以外の LoadGraph や LoadSoundMem などの 文字列を扱う関数全てで UTF-8 を使用する必要がありますのでご注意ください m(_ _)m
メンテ
Re: UTF-8とshift-jisの互換性 ( No.3 )
名前:Carbon (解決済) 日時:2025/09/06 22:55

ありがとうございます! 無事出力できました!
メンテ

Page: 1 |

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

   クッキー保存