【发布时间】:2011-07-11 23:19:37
【问题描述】:
我正在尝试使用以下代码格式化 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。 (它似乎没有出现,但 ¼ 之后应该有一个上标 L。)
编译器设置为使用 unicode,因为在程序中我可以调用 _T() 并让它正确评估,而不是在格式化 CString 时。
我做错了什么?
*编辑:* 进行更多调试表明 CString Format 方法的 arglist 接收到的值为“Ü_”
【问题讨论】:
-
您是否可能误解了您所看到的内容? UNICODE 字符
μ是 0x03BC。将其解释为两个单字节字符,您会得到¼,即 0xBC 和上标 L,即 0x03。 -
您是否使用 UNICODE 和 _UNICODE 编译您的应用程序?您的源文件是保存为 ANSI 还是 UTF-8?您是否尝试过显式使用 CStringW?