中文QString转成char类型中造成乱码的原因

QString内部采用的是unicode编码,但是unicode编码有很多种,在实际应用时应制定具体的编码形式,常见的有GBK、GB2312和UTF-8等。

UTF-8是解决国际上字符的一种多字节编码,它包含全世界国家所用到的所有字符,通用性强。英文单字节表示,中文需要三个字节表示。

GBK是国家标准GB2312基础上扩容后并兼容GB2312标准,无论英文中文都用双字节来表示。GBK包含全部中文字符,是中文国家标准的一种编码方式。GB2312是简体中文的码,GBK则支持简体中文和繁体中文。

指定unicode的编码方式一般采用的方法是在main函数中添加如下语句:

QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

此处指定unicode编码方式为GBK编码;

QString转换char操作为

QString path("我是汉字");

QByteArray cpath = path.toLocal8Bit();  注意,这个QByteArray 对象一定要建立

char *p = cpath.data();

此时便完成了中文QString到char类型的转换。但是我们单步运行程序,从调试窗口中观察char中的数据,发现不是”我是汉字“,而是乱码"ÎÒÊǺº×Ö"

这时,我们就会怀疑我们的转换没有成功,其实不然。因为在我们当前所用的QT软件界面中所显示的内容是采用latin编码后的结果,而我们的QString类中的内容”我是汉字“当前采用的是GBK编码,编码结果为ce d2 ca c7 ba ba d7 d6,而这八个字节的数据在latin中就是乱码"ÎÒÊǺº×Ö",我们将cpath对象展开可看到这八个字节的数据正是ce d2 ca c7 ba ba d7 d6,所以转换正确。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值