流行的软件开发商和公司(
Joel Spolsky,Fog Creek software)在编写C或C代码时倾向于使用wchar_t进行Unicode字符存储.对于良好的编码习惯,应该何时以及如何使用char和wchar_t?
在编写利用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");
在使用char时如何比较unicode字节(或字符)?
到目前为止,我喜欢在C中比较char和char的字符串的首选方法通常如下所示:
/* C code fragment */ const char *mail[] = { "ov€rlord@masters.lt","ov€rlord@masters.lt" }; 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类型的字符元素的方法吗?