首页 > 代码库 > Cocos2d-x项目移植到WP8系列之七:中文显示乱码

Cocos2d-x项目移植到WP8系列之七:中文显示乱码

 

C++和C#互调时经常会带一些参数过去例如最常见的字符串,如果字符串里有中文的话,会发现传递过去后变成了乱码,这是因为两边的编码方式不一样,C#默认使用UnicodeEncoding(中文环境下是GBK?)编码,C++(Lua和cocos2d-x引擎默认编码为UTF-8)里用的是utf8编码。大概流程就是 C++的里的std::string字符串转成 C++/CX 里的 Platform::string,再传到C#里System.String ,从C#到C++的话就是反过来。

 

Cocos其实已经自带了相关代码,就在:CCWinRTUtils.h 和CCWinRTUtils.cpp里

std::string 转 platform^ string

 1 std::wstring CCUtf8ToUnicode(const char * pszUtf8Str, unsigned len/* = -1*/) 2 { 3     std::wstring ret; 4     do 5     { 6         if (! pszUtf8Str) break; 7         // get UTF8 string length 8         if (-1 == len) 9         {10             len = strlen(pszUtf8Str);11         }12         if (len <= 0) break;13 14         // get UTF16 string length15         int wLen = MultiByteToWideChar(CP_UTF8, 0, pszUtf8Str, len, 0, 0);16         if (0 == wLen || 0xFFFD == wLen) break;17         18         // convert string  19         wchar_t * pwszStr = new wchar_t[wLen + 1];20         if (! pwszStr) break;21         pwszStr[wLen] = 0;22         MultiByteToWideChar(CP_UTF8, 0, pszUtf8Str, len, pwszStr, wLen + 1);23         ret = pwszStr;24         CC_SAFE_DELETE_ARRAY(pwszStr);25     } while (0);26     return ret;27 }
1         std::string str = "测试";2         Platform::String ^pStr_str = ref new Platform::String(CCUtf8ToUnicode(str.c_str()).c_str());

 

platform^ string 转 std::string

 1 std::string CCUnicodeToUtf8(const wchar_t* pwszStr) 2 { 3     std::string ret; 4     do 5     { 6         if(! pwszStr) break; 7         size_t len = wcslen(pwszStr); 8         if (len <= 0) break; 9         10         size_t convertedChars = 0;11         char * pszUtf8Str = new char[len*3 + 1];12         WideCharToMultiByte(CP_UTF8, 0, pwszStr, len+1, pszUtf8Str, len*3 + 1, 0, 0);13         ret = pszUtf8Str;14         CC_SAFE_DELETE_ARRAY(pszUtf8Str);15     }while(0);16 17     return ret;18 }
1     Platform::String^ str = "测试";2     string str1 = CCUnicodeToUtf8(str);


转载请注明出处:http://www.cnblogs.com/zouzf/p/3984628.html 

 

Cocos2d-x项目移植到WP8系列之七:中文显示乱码