//QString默认使用unicode 编码来存储;
//但是windows使用的gbk
QString str = "汉字" // qt不知道"汉字"到底是什么编码, 就会使用Latin - 1编码, 转换成Unicode并存到 QString
所以一般的方法是
QString str = QString::fromLocal8Bit("汉字"); 告诉qt 使用的local的编码, 而local默认编码是gbk
所以就会使用gbk编码, 转换成Unicode并存到 QString
vc2010 新加入了(注意不是vs2010)
#pragma execution_character_set("utf-8") 指示char的执行字符集是UTF-8编码。
故只需要加这一句, 在编译源码的时候,会把"文本" 的编码设置为 utf-8,而不是默认的gbk乱码不会出现.
但使用了#pragma execution_character_set("utf-8")
char[] 却会变成乱码
char s[100] = "我是汉字";//s乱码
strcat_s(s, "我是汉字");//s乱码
解决方法:
strcpy_s(s, QString("我是汉字").toLocal8Bit().data()); 将"我是汉字"转换成GBK的编码.
故猜测原因:
char s[100] = "我是汉字";//s乱码
strcat_s(s, "我是汉字");//s乱码
其中的"=" "strcat_s" 是按照local的编码来转换的,也就是GBK.
所以当使用了execution_character_set("utf-8")时,
strcat_s(s, "我是汉字") 就是把utf-8的 "我是汉字" 按照gbk的编码 转换给s,故出现乱码