在 C++ 编程中经常处理 Unicode 编码的字符串,Unicode 通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为 0 就可以。每一个字符在 Unicode 编码表中对应为一个编号。例如:B 对应 0042
在 Unicode 编码表中:
数字的编码范围为:0x0030 - 0x0039, 小写英文字母的范围:0x0061 - 0x007A
大写英文字母范围:0x0041 - 0x005A, 汉子的编码范围: 0x4E00 - 0x9FFF
具体编码对照可以查看:Unicode 编码对照表
因此我们获取字符串中的中文、英文等的思路就是获取每一个字符的编码,然后判断编码范围是否在相应的编码范围内,具体代码如下:
std::wstring tempStr = L""; std::wstring oldStr = "中文123*&……9@English”; for(int i = 0; i < oldStr.length(); ++i) { // 获取每个字符的第一个字节 unsigned char* pCh = (unsigned char*)&oldStr[i]; // 数字 if((*pCh >= 0x30 && *pCh <= 0x39) && *(pCh + 1) == 0x00) { tempStr += oldStr[i]; } // 大写字母 else if((*pCh >= 0x41 && *pCh <=0x5A) && *(pCh + 1) == 0x00) { tempStr += oldStr[i]; } // 小写字母 else if((*pCh >= 0x61 && *pCh <= 0x7A) && *(pCh + 1) == 0x00) { tempStr += oldStr[i]; } // 希腊文字 else if((*pCh >= 0xB1 && *pCh <= 0xC9) && *(pCh + 1) == 0x03) { tempStr += oldStr[i]; } // 中文 else if (((*pCh >= 0) && (*pCh <= 0xff)) && (*(pCh + 1) >= 0x4e && *(pCh + 1) <= 0x9f)) { tempStr += oldStr[i]; } }