qt中文乱码问题

时间:2023-02-02 18:23:53
http://www.linux-ren.org/thread-61892-1-1.html

帖子里解决方案是

修改main.cpp,添加包含:
#include <QTextCodec>
主函数中创建QApplication后马上加:
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);
"UTF-8"是汉字编码,也可能是"GBK"。
还乱码的话再加:
QTextCodec::setCodecForCStrings(codec);

我想知道为什么会出现乱码,windows下不管是vs还是creator不是默认GBK的么?有没有一劳永逸的方法,总不能让我每个程序里都来这么一段吧?

6 个解决方案

#1


使用系统字符编码格式:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
windows下一般使用GBK,linux采用uft8

#2


代码里不要有中文,将English字符串放到tr()里,程序完成后再去翻译成中文。

#3


引用 2 楼 jdwx1 的回复:
代码里不要有中文,将English字符串放到tr()里,程序完成后再去翻译成中文。


可是我以前写程序的时候都没有问题,就是今天突然出现这种问题了,为什么?

#4


引用 1 楼 feilinhe 的回复:
使用系统字符编码格式:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
windows下一般使用GBK,linux采用uft8

我知道,我想知道能不能有一劳永逸的方法

#5


引用 4 楼 han3172700 的回复:
引用 1 楼 feilinhe 的回复:使用系统字符编码格式:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
windows下一般使用GBK,linux采用uft8
我知道,我想知道能……

翻译就是一劳永逸的办法,不光是中文没问题,其它国家的文字也没问题。
修改QTextCodec不是好办法,中国改GBK,法国,德国,加拿大最麻烦讲法语还有英语。
这么改下去没完。
而且代码里有中文,代码移植就会有问题,在windows里写的代码到linux里可能编译出错,反过来也一样。

#6


LZ的想法目前没有,用tr()翻译也不是一劳永逸的方法,还是等Qt5完全支持天然utf8再说吧

#1


使用系统字符编码格式:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
windows下一般使用GBK,linux采用uft8

#2


代码里不要有中文,将English字符串放到tr()里,程序完成后再去翻译成中文。

#3


引用 2 楼 jdwx1 的回复:
代码里不要有中文,将English字符串放到tr()里,程序完成后再去翻译成中文。


可是我以前写程序的时候都没有问题,就是今天突然出现这种问题了,为什么?

#4


引用 1 楼 feilinhe 的回复:
使用系统字符编码格式:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
windows下一般使用GBK,linux采用uft8

我知道,我想知道能不能有一劳永逸的方法

#5


引用 4 楼 han3172700 的回复:
引用 1 楼 feilinhe 的回复:使用系统字符编码格式:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
windows下一般使用GBK,linux采用uft8
我知道,我想知道能……

翻译就是一劳永逸的办法,不光是中文没问题,其它国家的文字也没问题。
修改QTextCodec不是好办法,中国改GBK,法国,德国,加拿大最麻烦讲法语还有英语。
这么改下去没完。
而且代码里有中文,代码移植就会有问题,在windows里写的代码到linux里可能编译出错,反过来也一样。

#6


LZ的想法目前没有,用tr()翻译也不是一劳永逸的方法,还是等Qt5完全支持天然utf8再说吧