CPP对汉字的处理
学习cpp程序时,处理的都是英文字符串。而如何处理汉字字符串呢? 这就需要了解汉字编码了。 这里是一篇好文章: [http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html](http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html)

我简要的理解为,将输入的汉字转换为通用的Unicode编码,在C++中用wchat_t存储,进而使用wstring操作。转换为wstring后,就可以像处理英文字符串一样,数组处理了。

下面是char转为wstring的代码:
1
wchar_t* MBCS2Unicode(wchar_t* buff, const char * str) { wchar_t * wp = buff; const char * p = str; while (*p) { *wp = (wchar_t)0x0; if (*p & 0x80) { //sizeof(wchar_t) in linux is 4 char temp[sizeof(wchar_t)]; temp[0] = *p; p++; temp[1] = *p; for (int i = 2; i < sizeof(wchar_t); i++) temp[i] = 0x0; *wp = *(wchar_t *)temp; } else{ *wp = (wchar_t)*p; } wp++; p++; } *wp = 0x00000000; return buff; } std::wstring str2wstr(char* str) { size_t len = strlen(str); wchar_t* b = (wchar_t *)malloc((len + 1)*sizeof(wchar_t)); MBCS2Unicode(b, str); std::wstring r(b); free(b); return r; }
以下是wchat_t的测试代码:
1
#include <stdio.h> #include <iostream> int main() { wchar_t s[] = L"中国";//ansi to unicode.every char is 2 bytes. std::wstring r(s); std::wcout.imbue(std::locale("chs"));//set chinese std::wcout << r[0] << " " << r[1] << std::endl; getchar(); return 0; }
以后处理汉字就用这种方便的方法了。
文章作者: angelwhu
文章链接: https://www.angelwhu.com/paper/2014/08/20/cpp-treatment-of-chinese-characters/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 angelwhu_blog