#ifndef SUPPORT_TOOL_H
#define SUPPORT_TOOL_H
//////////////////////////////////////////////////////////////////////////
#include “cocos2d.h”
//////////////////////////////////////////////////////////////////////////
#define A2U(varString) wSupportTool::AStrToUTF8(varString).c_str() //用于显示中文(窄字符)
#define W2U(varString) wSupportTool::WStrToUTF8(varString).c_str() //用于显示中文(宽字符)
//////////////////////////////////////////////////////////////////////////
class UTF8Tool
{
public:
//string to UTF8
static std::string AStrToUTF8(const std::string& src)
{
std::string curLocale=setlocale(LC_ALL,NULL);
setlocale(LC_ALL, “”);
int len=src.length()+1;
wchar_t *str =new wchar_t;
int total=mbstowcs(str,src.c_str(),len);
str=0;
std::wstring wstr=str;
delete] str;
setlocale(LC_ALL, curLocale.c_str());
return WStrToUTF8(wstr);
}
//wstring to UTF8
static std::string WStrToUTF8(const std::wstring& src)
{
std::string dest;
for (size_t i = 0; i < src.size(); i++){
wchar_t w = src*;
if (w <= 0x7f)
dest.push_back((char)w);
else if (w <= 0x7ff){
dest.push_back(0xc0 | ((w >> 6)& 0x1f));
dest.push_back(0x80| (w & 0x3f));
}
else if (w <= 0xffff){
dest.push_back(0xe0 | ((w >> 12)& 0x0f));
dest.push_back(0x80| ((w >> 6) & 0x3f));
dest.push_back(0x80| (w & 0x3f));
}
/*else if (sizeof(wchar_t) > 2 && w <= 0x10ffff){
dest.push_back(0xf0 | ((w >> 18)& 0x07)); // wchar_t 4-bytes situation
dest.push_back(0x80| ((w >> 12) & 0x3f));
dest.push_back(0x80| ((w >> 6) & 0x3f));
dest.push_back(0x80| (w & 0x3f));
}*/
else
dest.push_back('?');
}
return dest;
}
};
#endif
string Astr=A2U(“欢迎来到这个世界!”);
log(Astr.c_str());
LabelTTF::create(Astr, “Arial”, 14);
为什么这种方法在WIN32平台上面可以显示中文。但是一编绎成APK就运行不了,去掉这些代码之后,再编译又可以运行,希望高手指点一下,谢谢大家了
*
