我嘗試使用下面的代碼格式化一個CString:使用Unicode CString的格式返回錯誤的字符
const wchar_t * wch = L"μ";
CString str;
str.Format(_T("%c"), wch[0]);
然而,除了海峽具有「μ」的值,它實際上被設置爲「¼」 。當我調試它時,它識別wch爲「μ」。
而且,如果我做的:
const wchar_t * wch = L"μ";
CString str;
str.Format(_T("%s"), wch);
它給人以價值STR 「¼」。 (它似乎沒有出現,但在¼後應該有一個上標L.)
編譯器被設置爲使用unicode,因爲在程序中我可以調用_T()並且擁有它正確評估,而不是格式化CString時。
我在做什麼錯?
* 編輯:*做更多的調試表明CString的Format方法的arglist中收到的「U_」
有沒有可能你誤解了你所看到的? UNICODE字符'μ'是0x03BC。解釋爲兩個單字節字符,你得到'¼'是0xBC和上標L是0x03。 –
你用UNICODE和_UNICODE編譯你的應用程序嗎?您的源文件是保存爲ANSI還是UTF-8?你有沒有嘗試明確使用CStringW? –