使用Unicode的CString格式返回错误的字符

时间:2011-07-11 23:19:37

标签: c++ mfc

我正在尝试使用以下代码格式化CString:

const wchar_t * wch = L"μ";
CString str;
str.Format(_T("%c"), wch[0]);

然而,不是str具有值“μ”而是实际上设置为“¼”。当我调试它时,它将wch识别为“μ”。

此外,如果我这样做:

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

它给出值为“¼”的str。 (它似乎没有出现,但在1/4之后应该有一个上标L.)

编译器被设置为使用unicode,因为在程序中我可以调用_T()并且正确评估它,而不是在格式化CString时。

我做错了什么?

* 编辑:* 进行更多调试表明CString Format方法的arglist接收的值为“Ü_”

3 个答案:

答案 0 :(得分:4)

我认为您需要使用“长”字符或字符串格式说明符 - %lc wchar_t%ls%S字符串。< / p>

答案 1 :(得分:1)

尝试

setlocale(LC_ALL, "");

在调用Format之前。 (除非你做任何不寻常的事情,否则在应用程序开始时调用setlocale就足够了。)

答案 2 :(得分:0)

我看到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;
}