トップページ > 記事閲覧
UTF-8を使用した文字列描画について
名前:Citrine 日時: 2017/07/16 13:51

いつもお世話になっております。 質問なのですが、以下のページを参考にUTF-8を使用した文字列描画を試したところ、 バグと思われる挙動を確認しました。 ttp://dxlib.o.oo7.jp/lecture/Android/Android_CharCode.html 1. DrawStringToHandle系の関数では正常に描画されるが、DrawString系では文字化けを起こす 2. フルスクリーンモード時にAlt+Tabなどでウィンドウの切り替えを行い、再度戻ると文字化けを起こす 上記の挙動は仕様でしょうか? 動作環境はWindows 10 Ver.1703 x64 コンパイラはVisual Studio Community 2017です 以下コードです #include "DxLib.h" #include <string> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(FALSE); SetUseCharCodeFormat(DX_CHARCODEFORMAT_UTF8); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); std::string str = u8"ABC %d あいう"; int Font = CreateFontToHandle(NULL, -1, -1); while (ProcessMessage() == 0 && ClearDrawScreen() == 0) { // 文字化け DrawString(0, 0, str.c_str(), GetColor(0xFF, 0xFF, 0xFF)); DrawFormatString(0, 20, GetColor(0xFF, 0xFF, 0xFF), str.c_str(), 10 + 20); // 正常 DrawStringToHandle(0, 40, str.c_str(), GetColor(0xFF, 0xFF, 0xFF), Font); DrawFormatStringToHandle(0, 60, GetColor(0xFF, 0xFF, 0xFF), Font, str.c_str(), 10 + 20); ScreenFlip(); } DxLib_End(); return 0; }
メンテ

Page: 1 |

Re: UTF-8を使用した文字列描画について ( No.1 )
名前:管理人 日時:2017/07/16 22:29

ご指摘ありがとうございます 載せていただいたコードで手元でも現象を確認できました 1、2 共に仕様ではなくバグです 修正版をアップしましたので、よろしければお使いください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい)
メンテ
Re: UTF-8を使用した文字列描画について ( No.2 )
名前:Citrine 日時:2017/07/17 23:59

対応ありがとうございます。 DrawString DrawFormatString DrawStringToHandle DrawFormatStringToHandle の関数で正常動作を確認しました。 ただ、恐縮なのですが以下の関数でも2.の症状が出ることを確認しましたので報告しておきます。 DrawVStringToHandle DrawRotaStringToHandle
メンテ
Re: UTF-8を使用した文字列描画について ( No.3 )
名前:管理人 日時:2017/07/19 01:11

> ただ、恐縮なのですが以下の関数でも2.の症状が出ることを確認しましたので報告しておきます。 > DrawVStringToHandle > DrawRotaStringToHandle 文字列処理全般に関わる箇所の修正を行ったので、No.1 の修正版で DrawVStringToHandle, DrawRotaStringToHandle でも正常に描画されるようになっていると思うのですが、 No.1 の修正版でも文字化けしてしまっていますでしょうか?
メンテ
Re: UTF-8を使用した文字列描画について ( No.4 )
名前:Citrine 日時:2017/07/19 23:09

No.1のテスト版ビルドで発生しました。(リビルドも行っています) さらに調査したところ、関数に関わらず縦書きフォントを使用した際に現象が発生することがわかりました。 以下テストコードです (初期化処理は最初のコードと同様) std::string str = u8"ABC %d あいう"; int Font = CreateFontToHandle(u8"@MS 明朝", -1, -1); while (ProcessMessage() == 0 && ClearDrawScreen() == 0) { DrawStringToHandle(0, 0, str.c_str(), GetColor(0xFF, 0xFF, 0xFF), Font); DrawVStringToHandle(120, 120, str.c_str(), GetColor(0xFF, 0xFF, 0xFF), Font); DrawRotaStringToHandle(320, 240, 1.0, 1.0, 0.0, 0.0, 3.1415 / 4.0, GetColor(0xFF, 0xFF, 0xFF), Font, GetColor(0x00, 0x00, 0x00), TRUE, str.c_str()); ScreenFlip(); } (終了処理)
メンテ
Re: UTF-8を使用した文字列描画について ( No.5 )
名前:管理人 日時:2017/07/20 02:31

すみません、ご情報ありがとうございます 手元の環境でもフォント名の先頭に@を付けた縦書きフォントで現象が発生することを確認できました フォント名チェックに@がついていないフォント名で比較している箇所があり、 それが原因で現象が発生してしまっていました 修正版をアップしましたので、何度も申し訳ありませんがよろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい)
メンテ
Re: UTF-8を使用した文字列描画について ( No.6 )
名前:Citrine(解決) 日時:2017/07/20 22:55

度々ありがとうございます こちらの環境で正常に動作することを確認しました 対応ありがとうございました!
メンテ

Page: 1 |

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

   クッキー保存