原文链接: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

 std::wstring CCUtf8ToUnicode(const char * pszUtf8Str, unsigned len/* = -1*/)
{
std::wstring ret;
do
{
if (! pszUtf8Str) break;
// get UTF8 string length
if (- == len)
{
len = strlen(pszUtf8Str);
}
if (len <= ) break; // get UTF16 string length
int wLen = MultiByteToWideChar(CP_UTF8, , pszUtf8Str, len, , );
if ( == wLen || 0xFFFD == wLen) break; // convert string
wchar_t * pwszStr = new wchar_t[wLen + ];
if (! pwszStr) break;
pwszStr[wLen] = ;
MultiByteToWideChar(CP_UTF8, , pszUtf8Str, len, pwszStr, wLen + );
ret = pwszStr;
CC_SAFE_DELETE_ARRAY(pwszStr);
} while ();
return ret;
}
         std::string str = "测试";
Platform::String ^pStr_str = ref new Platform::String(CCUtf8ToUnicode(str.c_str()).c_str());

platform^ string 转 std::string

 std::string CCUnicodeToUtf8(const wchar_t* pwszStr)
{
std::string ret;
do
{
if(! pwszStr) break;
size_t len = wcslen(pwszStr);
if (len <= ) break; size_t convertedChars = ;
char * pszUtf8Str = new char[len* + ];
WideCharToMultiByte(CP_UTF8, , pwszStr, len+, pszUtf8Str, len* + , , );
ret = pszUtf8Str;
CC_SAFE_DELETE_ARRAY(pszUtf8Str);
}while(); return ret;
}
     Platform::String^ str = "测试";
string str1 = CCUnicodeToUtf8(str);

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

最新文章

  1. StringBuffer(线程安全)StringBuilder(非线程安全)
  2. 2016/10/28 很久没更了 leetcode解题 3sum问题进阶版4sum
  3. 优质IT资源分享社区www.itziyuan.top
  4. DEDECMS之五 单页
  5. Moodle插件之Filters(过滤器)
  6. jQuery性能优化的28个建议
  7. Subsequence
  8. OpenCV3添加滑动条和鼠标事件到图形界面
  9. kill命令&quot;-1&quot;这个参数到底是杀进程还是reload?(转)
  10. anaconda的scikit-learn报错It seems that scikit-learn has not been built
  11. java面试题 wait和sleep区别
  12. HTML5外包团队:HTML5 Canvas使用教程
  13. Java并发--Java线程面试题 Top 50
  14. vue系列之webstrom的设置
  15. --save-dev和--save的区别
  16. PHP操作MySQL数据库--PHP的应用
  17. Java jdbc访问sqlserver,oracle数据库 DEMO
  18. Ajax提交进度显示实例
  19. Java 中的正则(Pattern)
  20. php调用mysql存储过程游标

热门文章

  1. Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色
  2. struts-config.xml 文件:
  3. 音频处理之去噪算法---基于pcm和g711的音频16000hz、8bit去噪声算法
  4. HDU4781(2013成都站A题)
  5. .NET调用JAVA的WebService方法
  6. linux下安装nmon监控工具
  7. Java线程的5种状态及切换
  8. UML初览(转)
  9. 我的Android进阶之旅------>Android利用温度传感器实现带动画效果的电子温度计
  10. (4.16)sql server迁移DB文件(同一DB内)