2011-07-11 5 views
1

を返します。 。私はそれをデバッグするとき、それは "μ"としてwchを認識します。CStringのフォーマットは、私は次のコードを使用してのCStringをフォーマットしようとしている間違った文字

さらに、私がしなければ:

const wchar_t * wch = L"μ"; 
CString str; 
str.Format(_T("%s"), wch); 

それが価値を持つSTRを与える "¼"。 (表示されないようですが、¼の後ろに上付き文字Lがあるはずです)

コンパイラでは、プログラム内で_T()を呼び出せてユニコードを使用するように設定されていますCStringをフォーマットするときには正しく評価されません。

私は間違っていますか?

* 編集:より多くのデバッグを行う*はCStringのフォーマット方法の引数リストは、私はあなたが「長い」文字または文字列の書式指定子を使用する必要があると考えてい

+3

あなたはあなたが見ているものを誤解している可能性がありますか?ユニコード文字「μ」は0x03BCです。これを2バイトの1バイト文字として解釈し、 '¼'は0xBC、上付きのLは0x03となります。 –

+0

UNICODEと_UNICODEでアプリケーションをコンパイルしていますか?ソースファイルはANSIまたはUTF-8として保存されていますか? CStringWを明示的に使ってみましたか? –

答えて

3

「U_」の値を受け取ることを示している - そう%lc文字列の場合はwchar_tおよび%lsまたは%Sです。私はMiu%cとし、%lc

// a1.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <afx.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    const wchar_t * wch = L"μ"; 
    CString str; 
    str.Format(_T("%c"), wch[0]); 
    MessageBox(GetForegroundWindow(), str.GetBuffer(), L"MyChar", MB_OK + MB_ICONHAND); 
    str.Format(_T("%s"), wch); 
    MessageBox(GetForegroundWindow(), str.GetBuffer(), L"MyChar", MB_OK + MB_ICONHAND); 
    return 0; 
} 
+0

は役に立たないようです。 '%lc'を使用すると空の文字列を返し、'%ls'や '%S'はエラーを返します – jonbooz

+1

@jonbooz:彼の提案は正しいもので、VC++ 2010でうまく動作します。 ... – ildjarn

0

は、フォーマットを呼び出す前に

setlocale(LC_ALL, ""); 

を試してみてください。あなたが何か異常なことをしていない限り、アプリケーションの開始付近でsetlocaleを一度呼び出すだけで十分です。)

1

で見る

関連する問題