读书人

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

发布时间: 2012-01-29 21:39:32 作者: rapoo

中文字符串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

读书人网 >QT开发

热点推荐