Cocos2d-x项目移植到WP8系列之七:中文显示乱码
2024-08-27 15:37:16
原文链接: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
最新文章
- StringBuffer(线程安全)StringBuilder(非线程安全)
- 2016/10/28 很久没更了 leetcode解题 3sum问题进阶版4sum
- 优质IT资源分享社区www.itziyuan.top
- DEDECMS之五 单页
- Moodle插件之Filters(过滤器)
- jQuery性能优化的28个建议
- Subsequence
- OpenCV3添加滑动条和鼠标事件到图形界面
- kill命令";-1";这个参数到底是杀进程还是reload?(转)
- anaconda的scikit-learn报错It seems that scikit-learn has not been built
- java面试题 wait和sleep区别
- HTML5外包团队:HTML5 Canvas使用教程
- Java并发--Java线程面试题 Top 50
- vue系列之webstrom的设置
- --save-dev和--save的区别
- PHP操作MySQL数据库--PHP的应用
- Java jdbc访问sqlserver,oracle数据库 DEMO
- Ajax提交进度显示实例
- Java 中的正则(Pattern)
- php调用mysql存储过程游标