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

 原文链接:http://www.cnblogs.com/zouzf/p/3984628.html 

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 length
15         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 

原文地址:https://www.cnblogs.com/zouzf/p/3984628.html