当前位置: 代码迷 >> QT开发 >> 中文字符串ANSI转UTF8的有关问题
  详细解决方案

中文字符串ANSI转UTF8的有关问题

热度:289   发布时间:2016-04-25 05:11:00.0
中文字符串ANSI转UTF8的问题
本人在Linux ARM平台下用Qt4.7操作一IC卡读卡器,该读卡器要求写入或传回的数据均为ANSI格式。而我的应用程序字符编码为UTF8,这导致显示传回的数据时出了问题:英文字符都能显示,唯独中文字符全为乱码。

  我在main()函数中添加下面两条语句
C/C++ code
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));


  在往读卡器写入数据时,通过下面的调用能把LineEdit控件里的中文正确转为ANSI的字符。
C/C++ code
    //把控件中的内容转为ANSI    dataLineEdit->text().toLocal8Bit().data();


  但是收到传回的包含有中文的数据时,通过下面的调用显示为乱码,但英文能正常显示。
C/C++ code
    dataLineEdit->setText(QString::fromLocal8Bit(data));//data为接收到的数据,为ANSI的字符串 


  本人刚接触Qt不久,希望各位大侠不吝赐教,谢谢。
 

------解决方案--------------------
唉,认识字符编码,其实跟qt关系不大。需要多了解一下字符编码的知识。

其实ANSI 这个提法是很不好的,害了很多初学者。
------解决方案--------------------
传回的字符串是什么编码的?
------解决方案--------------------
跟操作系统的编码集也有关系。
我的win2003也折腾了很久。。
------解决方案--------------------
QTextCodec::setCodecForTr(QTextCodec::codecForName("gbk"));试试看
------解决方案--------------------
试一下
dataLineEdit->setText(QString::fromAscii(data));//data为接收到的数据,为ANSI的字符串
既然是ANSI,怎么能用QString::fromLocal8Bit
  相关解决方案