cocos2d学习记录(二)-中文显示
2012-07-30 16:10
471 查看
在显示中文时候,labelWithString会出现乱码,原来要传入utf-8格式的字符串进去,于是在网上找了解决办法,如下:
方法一:只能用于win32平台
std::string WStrToUTF8ForWin32(const wstring& text)
{
int asciisize = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), text.size(), NULL, 0, NULL, NULL);
if (asciisize == ERROR_NO_UNICODE_TRANSLATION || asciisize == 0)
{
return string();
}
char* resultstring = new char[asciisize];
int convresult = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), text.size(), resultstring, asciisize, NULL, NULL);
if (convresult != asciisize)
{
return string();
}
std::string buffer(resultstring, convresult);
delete[] resultstring;
return buffer;
}
方法二:可以跨平台
std::string WStrToUTF8(const wstring& text)
{
std::string buffer;
buffer.clear();
for (size_t i = 0; i < text.size(); i++)
{
wchar_t w = text[i];
if (w <= 0x7f)
buffer.push_back((char)w);
else if (w <= 0x7ff)
{
buffer.push_back(0xc0| ((w >> 6)& 0x1f));
buffer.push_back(0x80| (w & 0x3f));
}
else if (w <= 0xffff)
{
buffer.push_back(0xe0| ((w >> 12)& 0x0f));
buffer.push_back(0x80| ((w >> 6) & 0x3f));
buffer.push_back(0x80| (w & 0x3f));
}
else if (sizeof(wchar_t) > 2 && w <= 0x10ffff)
{
buffer.push_back(0xf0| ((w >> 18)& 0x07)); // wchar_t 4-bytes situation
buffer.push_back(0x80| ((w >> 12)& 0x3f));
buffer.push_back(0x80| ((w >> 6) & 0x3f));
buffer.push_back(0x80| (w & 0x3f));
}
else
buffer.push_back('?');
}
return buffer;
}
返回得到string字符串
方法一:只能用于win32平台
std::string WStrToUTF8ForWin32(const wstring& text)
{
int asciisize = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), text.size(), NULL, 0, NULL, NULL);
if (asciisize == ERROR_NO_UNICODE_TRANSLATION || asciisize == 0)
{
return string();
}
char* resultstring = new char[asciisize];
int convresult = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), text.size(), resultstring, asciisize, NULL, NULL);
if (convresult != asciisize)
{
return string();
}
std::string buffer(resultstring, convresult);
delete[] resultstring;
return buffer;
}
方法二:可以跨平台
std::string WStrToUTF8(const wstring& text)
{
std::string buffer;
buffer.clear();
for (size_t i = 0; i < text.size(); i++)
{
wchar_t w = text[i];
if (w <= 0x7f)
buffer.push_back((char)w);
else if (w <= 0x7ff)
{
buffer.push_back(0xc0| ((w >> 6)& 0x1f));
buffer.push_back(0x80| (w & 0x3f));
}
else if (w <= 0xffff)
{
buffer.push_back(0xe0| ((w >> 12)& 0x0f));
buffer.push_back(0x80| ((w >> 6) & 0x3f));
buffer.push_back(0x80| (w & 0x3f));
}
else if (sizeof(wchar_t) > 2 && w <= 0x10ffff)
{
buffer.push_back(0xf0| ((w >> 18)& 0x07)); // wchar_t 4-bytes situation
buffer.push_back(0x80| ((w >> 12)& 0x3f));
buffer.push_back(0x80| ((w >> 6) & 0x3f));
buffer.push_back(0x80| (w & 0x3f));
}
else
buffer.push_back('?');
}
return buffer;
}
返回得到string字符串
相关文章推荐
- cocos2d-x学习笔记(六)TextBMFont控件显示中文乱码或者无法显示
- lucene学习记录(2) - 实时索引,中文分词
- cocos2d学习记录(五)-动画详解
- discuz学习记录:重复前面的步骤,分页显示公务员题库内容
- cocos2d学习记录(七)-场景切换
- cocos2d-x 学习记录
- cocos2d-x 中文显示和自定义字体
- cocos2d_x使用iconv库转码解决中文显示问题
- discuz学习记录:前面的数据用EasyUI DataGrid显示,实现了服务器端分页
- discuz学习记录:使用C::t方法显示数据表内容
- Cocos2d-x初入学堂(7)-->win32显示中文乱码解决方法
- cocos2d-x中中文显示问题解决方法二
- Cocos2d-x 学习随记二 Boost::Locale解决中文乱码问题
- cocos2d-x 3.1.1 step by step 学习笔记3 Win32平台下中文乱码问题
- cocos2d-x中文显示:加字库
- Sphinx语音识别学习记录 (四)-小范围语音中文识别
- 【51单片机学习过程记录】5数码管静态显示
- Cocos2d-x项目移植到WP8系列之七:中文显示乱码
- cocos2d 显示中文(使用bmpfont generator这个工具)
- 用XML文件在Cocos2d-x中实现中文的显示