1.v8中string都是utf8格式,Local<String> v8Str = String::NewFromUtf8(...);
windows下默认系统编码是gb2312,vs中默认使用win系统的编码格式,也是gb2312
2.所以要做的是一开始把js脚本的字符串转成utf8格式,然后如果要把js脚本执行结果输出到控制台,再把直接结果转成gb2312格式,转换函数如下:
<pre name="code" class="cpp">char* EncodingTypeUtil::UTF8ToGBK(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}
std::string EncodingTypeUtil::GBKToUTF8(const std::string& strGBK)
{
std::string strOutUTF8 = "";
WCHAR * str1;
int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
str1 = new WCHAR[n];
MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n); n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
char * str2 = new char[n];
WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
strOutUTF8 = str2;
delete[]str1;
str1 = NULL;
delete[]str2;
str2 = NULL;
return strOutUTF8;
}
3.但是对于把js脚本字符串转成utf8格式,还有个更简单的方法:
#pragma execution_character_set("utf-8")
这是把字符串常量按照UTF8编码
4.偶然看到网上的一个办法: Cocos2d-x程序Windows下VC中文乱码的解决(用MultiByteToWideChar进行转换,VC2010有非常厉害的execution_character_set)
最后
以上就是沉默自行车最近收集整理的关于v8 windows vs 中文乱码的全部内容,更多相关v8内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复