Qt中QString转char*以及编码的问题

19 篇文章 0 订阅

如果我们有这样到一个需求:从一个文件中读取字符串,然后对这个字符串进行进一步到处理而需要用到char*类型时。就需要了解Qt到编码,以及如何从QString 转化为char *类型。以读取ini文件为例。

1.编码转换
读取ini文件需要用到QSetting类,读取方法如下:http://blog.csdn.net/yaowangii/article/details/78733022
此时我们读取得到到字符串是QString类型的,这是Qt中最常用到的字符串的类型。如果此时你打印输出从ini取出来到数据,也许你会看到输出控制台中会有一堆到乱码出现。这就涉及到Qt的编码问题了,在Qt内部是使用Unicode编码的,即QString保存的是Unicode编码的字符串。所有使用QString的函数都认为QString内部是Unicode字符串。 而如果此时你读取的ini文件是utf-8编码的话,意味着你用Unicode编码方式来显示utf-8的字符串,自然而然地出现了乱码的情况。解决办法也很简单,只需要告诉Qt我这个QString是什么编码方式就可以了。例如:如果str为从ini文件到读取到的Qstring类型的字符串,只需要添加一行代码即可:

QString value =  QString::fromUtf8(str.toByteArray());

这样就表明了这个QString是以utf-8编码格式来保存到 ,此时再用qDebug来打印value值时,就可以看到输出控制台中不会出现乱码到情况了。

2.QString到char*到转换
QString 到char*的转化有两种方法

1) QByteArray b = value.toUtf8(); //value为上一步中通过编码转化得到到字符串
     char *strZH = b.data();

2)  std::string dataStrZH = value.toStdString();
const char* strZH = dataStrZH.c_str();

这两种办法都能将QString 类型转化为char *类型的。当然,如果源字符串不含中文字符,那么方法一中到第一行可以写成QByteArray b = value.toLatin1(),不过这种方法只能用于不含中文字符到转化,如果含有中文字符会转化失败,字符显示乱码。因此如果源字符串含有中文字符,还是用以上两种方法来转化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值