记录 关于Unicode 转 UTF-8 字符编码

来源:互联网 发布:unity3d室内场景建模 编辑:程序博客网 时间:2024/06/05 18:47

最近项目被字符编码困扰好久,原因是服务端是java默认的utf-8 字符编码,客户端是mfc的unicode 字符编码,两者不统一,发送中文时乱码。当我在网上找了好久,发现了下面的文章,一下解决了。做个记录,免得日后忘记没地看。

char* EncodeToUTF8(const char* mbcsStr) {  wchar_t*  wideStr;  char*   utf8Str;  int   charLen; charLen = MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, NULL, 0);  wideStr = (wchar_t*) malloc(sizeof(wchar_t)*charLen);  MultiByteToWideChar(CP_ACP, 0, mbcsStr, -1, wideStr, charLen); charLen = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL); utf8Str = (char*) malloc(charLen); WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, utf8Str, charLen, NULL, NULL); free(wideStr);  return utf8Str;} 
char* UTF8ToEncode(const char* mbcsStr){ wchar_t*  wideStr;  char*   unicodeStr;  int   charLen; charLen = MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, NULL, 0);    wideStr = (wchar_t*) malloc(sizeof(wchar_t)*charLen);  MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, wideStr, charLen);  charLen =WideCharToMultiByte(CP_ACP, 0, wideStr, -1, NULL, 0, NULL, NULL);   unicodeStr = (char*)malloc(charLen);    WideCharToMultiByte(CP_ACP, 0, wideStr, -1, unicodeStr, charLen, NULL, NULL);  free(wideStr);  return unicodeStr;}

如果工程是Unicode字符集的话,上面的函数要做修改

0 0
原创粉丝点击