@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Unicodeでの文字化けについて

1
投稿者投稿内容
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2009-02-05 00:44
以下のようなコードをMFCで作ったアプリケーションで使用するとします。

MessageBox(_T("\\xE3\\x82\\xBF")); // 'タをUTF-8で表示'

MessageBox(_T("\\x30\\xBF")); // 'タをUTF-16で表示'

MessageBox(_T("\\x30\\xBF")); // 'タをSHIFT-JISで表示'

そして、ユニコードビルドするとすべて文字化けします。

次にこれをマルチバイトビルドすると、最後のSHIFT−JISだけ正しく表示されます。

マイクロソフトがUTF-8をサポートしないのは知っていましたが、なぜUTF-16も文字化けが出るのでしょうか?
もしご存知の方がいらっしゃったら教えてください。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2009-02-05 01:29
_Tの使い方を間違えていますね。
Shift_JISのときだけうまくいくということなので、文字セットを
「マルチバイト文字セットを使用する」
の設定になっているのでしょうね。

その設定でUnicode文字を表示するには、明に ::MessageBoxW を使ってください。
(CWnd::MessageBoxでは最終的に::MessageBoxAを呼んでしまう。)
それと_Tは文字コードを直接扱うのであればほとんど不要です。


もっとも、文字セットを
「Unicode文字セットを使用する」
の設定にして、Shift_JISコードの文字を常にUnicode文字列に変換して使うように
して統一をとるべきでしょう。
1

スキルアップ/キャリアアップ(JOB@IT)