zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    适配器模式
    注册模式
    工厂模式
    策略模式和注入控制反转
    验签
    php中加密和解密
    asp.net textbox keyup事件触发后台的textchange事件
    jquery $.post 返回json数据
    网页播放音频、视频文件——基于web的html 5的音乐播放器(转载)
    c# 柱状图(转载)
  • 原文地址:https://www.cnblogs.com/zouzf/p/3984628.html
Copyright © 2011-2022 走看看