• 5691阅读
  • 2回复

[提问]QT linux下显示中文 [复制链接]

上一主题 下一主题
离线donby
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-11

问题如标题显示
我在window 7上跑QT可以显示
但在linux上跑会无法显示中文
想请问是怎回事呢?

我的linux版本为Ubuntu 10.04
QTE版本为4.7.1

以下是我简单的范例:
在windows 7上

#include <QtGui/QApplication>
#include <QDebug>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QmlApplicationViewer viewer;
    QTextCodec *codec = QTextCodec::codecForName("System");
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);
  
    char str[10] = "你好";
    QString qstr = "哈囉";

    qDebug() << "str =" << str;
    qDebug() << "qstr =" << qstr;

    return app.exec();
}

这样在windows下是可以正确显示的
不管是设QString还是一般的char字串都可以
但是相同的做法我在ubuntu下就会有问题
跑出来的东西是乱码

甚至我利用 QString qstr = "哈囉";

qstr.toLocal8bit().data()
或是
qstr.toUtf8().data()
都还是不行

我甚至使用这样的编码设定
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));

结果也是一样的
我在网路上查了很久,似乎没有找到其他的做法
被这个搞的很头痛
就来这里请问大家了
也请大家不吝指教了!
在此也先跟各位说声谢谢啰


离线wangshengdi
只看该作者 1楼 发表于: 2011-08-11
我就把qt下的codes放到可执行文件同一目录下
a.addLibraryPath(QString("./"));
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);
离线donby
只看该作者 2楼 发表于: 2011-08-11

感谢楼上大大回复
后来问题解决了
主要是参考这篇文章
http://hi.baidu.com/cyclone/blog/item/9d7293130e5a498d6538dbf1.html
内容讲的很详细

另外讲个题外话
有时后我想要把QString存成char*的形式并且存到挡案
如果在main.cpp中使用
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
这行指令
不知道为啥会出现 QT buffer overflow detected 的错误讯習
不加入此行就不会当掉

但如此一来要怎把QString转成char*呢?
我的方法如下


QString qstr = "我是汉字";
char str[10] = "";

假设要把qstr存给str,最后存到挡案

strcpy(str, qstr.toLocal8Bit().data());  

此时str内容已经是"我是汉字"了,只是你直接印出来会变成乱码

读挡时想要把 str转成QString:

QString qstr2 = QString::fromLocal8Bit(str, -1);

这样印出qstr2就会是"我是汉字"了
这样即使不用include QTextCodec还有在main.cpp加入
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
也可以转

以上是我的做法~如果观念或作法有错
也请大家不吝指教啰

最后~我还是搞不懂为啥会出现 QT buffer overflow detected 的错误讯习
这部份可能就请高人来指点了 @@"


快速回复
限100 字节
 
上一个 下一个