流行的軟件開發人員和公司(Joel Spolsky, Fog Creek software)傾向於編寫C或C++代碼時使用wchar_t的爲Unicode字符存儲。關於良好的編碼習慣,何時以及如何使用char和wchar_t?正確使用字符串存儲在C和C++
我特別感興趣的是在編寫利用Unicode的軟件時符合POSIX。
當使用wchar_t的,您可以查找字符的寬字符數組中的每個字符或每個數組元素的基礎上:
/* C code fragment */
const wchar_t *overlord = L"ov€rlord";
if (overlord[2] == L'€')
wprintf(L"Character comparison on a per-character basis.\n");
你如何比較的Unicode字節(或字符)使用時char?
到目前爲止,我的首選用C比較型字符的字符串和字符的方式往往是這樣的:
/* C code fragment */
const char *mail[] = { "ov€[email protected]", "ov€[email protected]" };
if (mail[0][2] == mail[1][2] && mail[0][3] == mail[1][3] && mail[0][3] == mail[1][3])
printf("%s\n%zu", *mail, strlen(*mail));
爲字節相當於Unicode字符的這種方法掃描。 Unicode歐元符號€佔用3個字節。因此需要比較三個字符數組字節,以確定Unicode字符是否匹配。通常您需要知道要比較的字符或字符串的大小以及它爲解決方案工作產生的位數。這看起來根本不是處理Unicode的好方法。 有沒有比較char類型的字符串和字符元素的更好方法?
另外,當使用wchar_t時,如何將文件內容掃描到數組?函數fread似乎沒有產生有效的結果。
C++中的Unicode:不要使用'wchar_t',使用正確的Unicode庫。 – 2012-03-18 10:35:00
'傾向於使用wchar_t進行Unicode字符編碼。沒有;他們將它用於Unicode字符_storage_,並且存在很大差異。 – 2012-03-18 10:46:25
[std :: wstring VS std :: string]可能的重複(http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring) – 2012-03-18 10:46:51