在QT中char*类型的中文字符串打印出来都是乱码,可能是由于编码格式的不同,之前我的解决方法是将要显示的中文转换成UTF8的格式,写死在程序里,然后打印出来,而如果是要从QT界面的文本框中获取中文,转换成char*类型,发送到客户端,再转换成QString类型显示在客户端的界面上,之前的方法就不行了。网上百度了下,看了别人写的一些博客,帖子,总结了一下:
1、QString 转换成 char*
QT中要将QString转换成char*类型,首先要将其转换为QByteArray类,再利用QT中QByteArray类封装的接口将其转换为char*类型。方法如下:
QString s;
char *msg;
QByteArray ba = s.toLatin1();
msg = ba.data();
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
注意第三行,一定要加上,不可以s.toLatin1().data()这样一步完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = s.toLocal8Bit(); toLoacl8Bit支持中文
方法2:先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str();
ps:方法1本人亲测可用
2、中文的char*转换为QString
同样地利用QString类封装的接口函数fromLocal8Bit()转换为QString;
QString str;
char *msg;
str = QString::fromLocal8Bit(msg);