今MFCでWebからUTF-8文字列を取得し、それをリストコントロールのアイテムテキストとして表示するプログラムを書いています。同じMFCのコントロール上で入力されたユニコード文字(ここではハート記号)をそのままCStringを介してアイテムテキストとして入力する分には文字化けもないのですが、Webから取得したUTF-8のハート記号が文字化けします。
WindowsAPIにある文字コード変換APIを使ってUTF-8からワイド文字に変換すると、デバッグにおける変数ウォッチでは正常に読める形で見れますが、やはりリストコントロールのアイテムテキストでは文字化けします。
どなたかご教授いただける方が居られましたら幸いです。
質問主です。追記します。
UTF-8をUTF-16に変換後、エディットボックスなどのコントロールでは正常に表記できるのですが、どうもリストコントロールのアイテムテキストで文字化けします。どなたかこのような現象について経験をお持ちの方がおられましたらご助言願えれば幸いです
>どうもリストコントロールのアイテムテキストで文字化けします。
リストコントロールへ追加する際のコードはどうなっています?
std::string utf8;
std::wstring unicode;
char heart[] = {0xe2, 0x99, 0xa5, 0x00, 0x00, 0x00};
utf8 = heart;
unicode = ConvertMultiToWide(utf8);
::SetWindowText(GetDlgItem(hDlg, IDC_TEST), unicode.c_str());
ListBox_AddString(GetDlgItem(hDlg, IDC_LIST1), unicode.c_str());
で、スタティックテキストにもリストボックスにもハートが設定されましたが…。
リンクしておきます。
http://okwave.jp/qa/q6162073.html
OKWaveとまるちっぽいことは判っていた上で回答していましたが…
見当違いだった上に放置されてしまいました…。
VC2008EE + ResEditだったので、ダイアログのフォントがなんだったかは…微妙ですが。
放置などしたつもりはありませんのでご理解くださいw
ただ私の環境ではダイアログに設定したフォントによってエディットボックスとリストコントロールで挙動の違うフォントがあったので迷ってしまいました。
ご回答いただいた皆様ありがとうございました。