如果我们有这样到一个需求:从一个文件中读取字符串,然后对这个字符串进行进一步到处理而需要用到char*类型时。就需要了解Qt到编码,以及如何从QString 转化为char *类型。以读取ini文件为例。
1.编码转换
读取ini文件需要用到QSetting类,读取方法如下:http://blog.youkuaiyun.com/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(),不过这种方法只能用于不含中文字符到转化,如果含有中文字符会转化失败,字符显示乱码。因此如果源字符串含有中文字符,还是用以上两种方法来转化。