QString和char *的转换

在Qt开发中,使用QString时,通过toAscii().data()转换为char *可能会遇到乱码问题,尤其在处理包含中文的字符串时。正确的做法是,如果字符串仅包含英文,使用toLatin1().data();若有中文,则需考虑编码设置,如使用QTextCodec::setCodecForCStrings。QT文档提示,toAscii()并不保证返回US-ASCII字符串,其行为取决于编码设置。
摘要由CSDN通过智能技术生成
在Qt开发中,经常毫不犹豫的将QString通过toAscii().data()转换为char *类型,所以才让我浪费了N多时间寻找bug。
案例:
在某个项目中,需要传递一个很长的字符串,但通过toAscii().data()转换得到的char *指针,在运行过程中,该指针经常在某个位置变为乱码,所以字符串就被截断了,让我摸不着头脑好几次。
后来百度了一下,把toAscii().data()改成toLatin1().data(),问题解决了。

在main.cpp中,经常使用以下改变中文编码:

#include <QTextCodec>
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

所以,如果QString中存在中文,就使用toAscii()转换,如果只存在英文,使用toLatin1()即可。

QT文档这么写着:
QByteArray QString::toAscii () const

Returns an 8-bit representation of the string as a QByteArray.

If a codec has been set using QTextCodec::setCodecForCStrings(), it is used to convert Unicode to 8-bit c
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值