Qt QString转Char*传送中文参数编码问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hushanpa/article/details/52668060

开发环境:VS2010+qt4.8.7

开发对象:qtActivex 网页插件

在VS2010中,经过上网查询及本地用NotePad+打开cpp文件,验证了VS2010默认的编辑格式是UTF-8。插件要将中文参数转为字符数组与底层交互存取参数时发现,串口输出需要Ascii编码格式。于是将cpp保存为ASCII格式,并做如下尝试:

1、QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("ASCII")); //通常都是UTF-8、GB2312、GBK,手册里没有找到相关说明,ASCII有没有用都不知道。。。实验证明也没效果

2、QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));//只保留这句

char* str = QString("中文").toAscii().data();//这样传给底层再用ASCII显示是正确的

QByteArray ba = ui.edit_classInfo->text().toAscii();
char* str = ba.data();
//这样传给底层再用ASCII显示是乱码。。。

3、QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));//只保留这句

QByteArray ba = ui.edit_classInfo->text().toLocal8Bit();
char* str = ba.data(); //这样传给底层再用ASCII显示是正确的


但是接收时显示到UI上是错误的:

ui.edit_classInfo->setText(QString((char*)m_osdParam.channelName));//错误


4、QString text = QString::fromLocal8Bit((char*)m_osdParam.channelName);
ui.edit_classInfo->setText(text);//正确



从2可以看出,直接书写的QString转换到Ascii格式与ui取出来的QString转换到Ascii还是有差异的,只有使用fromLocal8Bit()与toLocal8Bit()成对使用才可以正常传输并显示中文字符。

展开阅读全文

没有更多推荐了,返回首页