求助 关于Linux下 QT程序中文乱码的问题

HMSJ827 2014-05-14 02:11:56
首先我是在WIN XP下用QT creater编写的程序,然后在虚拟机Ubuntu 12.04下编译运行。控制终端用的是Xshell。
以下是部分代码
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
// QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb18030"));
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb18030"));
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QTextCodec *codec = QTextCodec::codecForName("UTF-8");

QTextCodec::setCodecForTr(codec);

QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());


else if(strcmp(buf[0], "TEXT") == 0)
{
//sndm.text = QString(QLatin1String(buf[1]));
sndm.text = QString(buf[1]);
//sndm.text = QString::fromAscii(buf[1]);
qDebug()<<"sndm.text="<<sndm.text;
}

通过读取本地文件获取到信息,解析过程中将char转化成QString并通过信号与槽传递给另一个类

在另一个类中:将text内容通过bu显示出来,bu为一个toolbutton
if( !(m.text.isEmpty()) )
{
qDebug()<<"`````text="<<m.text;
bu->setText(m.text);
}


最后显示如下:
虚拟机开启终端中直接运行:


通过Xshell运行:


终端部分打印信息:


做了各种编码相关的尝试,始终不能显示正确的中文···
求大侠们帮忙看看到底是什么原因,以及解决办法,谢谢!
...全文
602 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingjs11 2015-12-31
  • 打赏
  • 举报
回复
我也遇到这个问题了,TextBroswer 或者 TextEdit对 QSstring 中的中文显示乱码,请问楼主解决了吗
云溪鹰飞 2014-05-16
  • 打赏
  • 举报
回复
你试下这个,Qt creator的源代码编码是utf-8的, QString text = QString::fromUtf8("中文");直接告诉你要赋值的QString你这个字符串是怎么编码的。
zhxianbin 2014-05-15
  • 打赏
  • 举报
回复
可能跟 Xshell 的字符集设置有关吧
lizimnin 2014-05-15
  • 打赏
  • 举报
回复
那就不知道了,我的是qt4.0,可以
HMSJ827 2014-05-15
  • 打赏
  • 举报
回复
引用 1 楼 lizimnin 的回复:
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
这个也是过了,不行···
HMSJ827 2014-05-15
  • 打赏
  • 举报
回复
引用 2 楼 sourire_will 的回复:
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale()); QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); 这两行改为: QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec);
这个之前就试过了,不行···
sourire_will 2014-05-14
  • 打赏
  • 举报
回复
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale()); QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); 这两行改为: QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec);
lizimnin 2014-05-14
  • 打赏
  • 举报
回复
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧