qt5 中文问题

//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,故出现乱码









 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值