Qt5中文乱码解决方法

时间:2022-09-22 19:09:03
目前试了两种方法
一:QStringLiteral

setWindowTitle(QStringLiteral("我是中文"));

二:

QTextCodec *codec = QTextCodec::codecForName("GB18030");
setWindowTitle(codec->toUnicode("我是中文"));


请问还有没有别的解决方法,这样太麻烦啊

26 个解决方案

#1


自己顶一下!

#2


最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

#3



        QTextCodec::setCodecForCStrings( QTextCodec::codecForLocale() );   
        QTextCodec::setCodecForTr( QTextCodec::codecForName( "utf8" ) );
在最前加上这两句就可以显示中文了

#4


引用 3 楼 liuyuanmei 的回复:
QTextCodec::setCodecForCStrings( QTextCodec::codecForLocale() );   
        QTextCodec::setCodecForTr( QTextCodec::codecForName( "utf8" ) );
在最前加上这两句就可以显示中文了

Qt5中没有这两个函数了

#5


a)  如果以前的源文件编码是GBK的,则需要使用QString::fromLocal8Bit()函数将原来的汉字括起来;或者直接将源文件编码转换成UTF-8的(缺点是MSVC编译器不能方便的使用了)。我使用了使用QString::fromLocal8Bit()来调用的方式(当然了,另写便捷函数或宏来处理)

b) 如果以前的源文件编码是UTF-8的,则什么都不用动。

#6


引用 2 楼 HeadmasterWang 的回复:
最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

+1

#7


引用 2 楼 HeadmasterWang 的回复:
最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease


这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的

#8


引用 7 楼 rophie 的回复:
引用 2 楼 HeadmasterWang 的回复:最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的

只要写入和读出用一样的codec即可。

#9


引用 8 楼 jdwx1 的回复:
引用 7 楼 rophie 的回复:引用 2 楼 HeadmasterWang 的回复:最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的
只要写入和读出用一样的codec即可。


每个中文都要用codec包起来这么麻烦吗

#10


setWindowTitle(QString::fromUtf8("我是中文"));

#11


引用 9 楼 rophie 的回复:
引用 8 楼 jdwx1 的回复:引用 7 楼 rophie 的回复:引用 2 楼 HeadmasterWang 的回复:最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的
只要写入和读出用一样的codec即可。

每个中文都要用codec包起来这么麻烦吗
    ……

在main.cpp设置一次就行了。

#12


解决了,只要文件编码是utf-8就不会乱码

#13


引用 12 楼 rophie 的回复:
解决了,只要文件编码是utf-8就不会乱码


+1

我发现了 这个不是Qt5的问题  而是新版Qt creater的问题
我用Qt4  然后用新版的Qt creater也是要这样设置换成旧版的creater就不会  

#14


现在问题是文件编码是utf-8的,但是有些字还是显示不出来,比如说"用户名:"这个字符串只能显示出"用户"两个字,后面的都是乱码,要么就在"用户名: "后面加个空格就可以了,字数好像只有偶数才能全部显示,不知道怎么回事

#15


引用 楼主 rophie 的回复:
目前试了两种方法
一:QStringLiteral
C/C++ code?1setWindowTitle(QStringLiteral("我是中文"));
二:
C/C++ code?12QTextCodec *codec = QTextCodec::codecForName("GB18030");setWindowTitle(codec->toUnicode("……

你的方法就是好方法,
不过还是少用中文吧

#16


引用 15 楼 wopabe 的回复:
引用 楼主 rophie 的回复:目前试了两种方法
一:QStringLiteral
C/C++ code?1setWindowTitle(QStringLiteral("我是中文"));
二:
C/C++ code?12QTextCodec *codec = QTextCodec::codecForName("GB18030");setWindowTitle(c……


不用中文用翻译?

对了,用QString::toLocal8Bit ()也行

#17


QString::Fromlocal8bit("我是中文")

#18


打错,呵呵……

#19


我也遇到同类问题

#20


引用 12 楼 rophie 的回复:
解决了,只要文件编码是utf-8就不会乱码


是啊 我也发现了,只有源代码文件是UTF8编码的,就不会出问题,

但是我在QT Creator中直接编写代码,怎么才能使输入的内容是UTF8编码的呢?编辑设置里面也没有找到。。。。

有知道的吗?

#21


该回复于2014-09-12 13:29:47被管理员删除

#22


同问+1....

#23


引用 5 楼 liuyuanmei 的回复:
a)  如果以前的源文件编码是GBK的,则需要使用QString::fromLocal8Bit()函数将原来的汉字括起来;或者直接将源文件编码转换成UTF-8的(缺点是MSVC编译器不能方便的使用了)。我使用了使用QString::fromLocal8Bit()来调用的方式(当然了,另写便捷函数或宏来处理)

b) 如果以前的源文件编码是UTF-8的,则什么都不用动。


QT5开发及实例 源代码是UTF-8的,出现编译问题,也是因为中文导致的问题

#24


引用 7 楼 rophie 的回复:
Quote: 引用 2 楼 HeadmasterWang 的回复:

最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease


这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的

楼主朋友您好,我现在遇到和您一样的问题,我的开发环境是:Qt5.2+VS2012,也出现中文乱码。
我现在要把数据库中的记录放在界面展示,但是数据库中是有中文的,如何显示呢

#25


setWindowTitle(QString::fromUtf8("我是中文")); //这个可以

setWindowTitle(QString::fromUtf8("我是中")); //这个就不可以,我试了好多,奇数个都不行,它都说有常量换行符,偶数个都可以,

请问是为什么?怎么解决?

#26


首先选中乱码源文件,比如main.cpp。然后点击“编辑”-“Select Encoding”-"utf8"
然后Ctrl+Z,运行一下就是中文了(忽略上栏提示)。我也不知道为什么,反正是可以用的。

#1


自己顶一下!

#2


最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

#3



        QTextCodec::setCodecForCStrings( QTextCodec::codecForLocale() );   
        QTextCodec::setCodecForTr( QTextCodec::codecForName( "utf8" ) );
在最前加上这两句就可以显示中文了

#4


引用 3 楼 liuyuanmei 的回复:
QTextCodec::setCodecForCStrings( QTextCodec::codecForLocale() );   
        QTextCodec::setCodecForTr( QTextCodec::codecForName( "utf8" ) );
在最前加上这两句就可以显示中文了

Qt5中没有这两个函数了

#5


a)  如果以前的源文件编码是GBK的,则需要使用QString::fromLocal8Bit()函数将原来的汉字括起来;或者直接将源文件编码转换成UTF-8的(缺点是MSVC编译器不能方便的使用了)。我使用了使用QString::fromLocal8Bit()来调用的方式(当然了,另写便捷函数或宏来处理)

b) 如果以前的源文件编码是UTF-8的,则什么都不用动。

#6


引用 2 楼 HeadmasterWang 的回复:
最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

+1

#7


引用 2 楼 HeadmasterWang 的回复:
最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease


这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的

#8


引用 7 楼 rophie 的回复:
引用 2 楼 HeadmasterWang 的回复:最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的

只要写入和读出用一样的codec即可。

#9


引用 8 楼 jdwx1 的回复:
引用 7 楼 rophie 的回复:引用 2 楼 HeadmasterWang 的回复:最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的
只要写入和读出用一样的codec即可。


每个中文都要用codec包起来这么麻烦吗

#10


setWindowTitle(QString::fromUtf8("我是中文"));

#11


引用 9 楼 rophie 的回复:
引用 8 楼 jdwx1 的回复:引用 7 楼 rophie 的回复:引用 2 楼 HeadmasterWang 的回复:最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease

这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的
只要写入和读出用一样的codec即可。

每个中文都要用codec包起来这么麻烦吗
    ……

在main.cpp设置一次就行了。

#12


解决了,只要文件编码是utf-8就不会乱码

#13


引用 12 楼 rophie 的回复:
解决了,只要文件编码是utf-8就不会乱码


+1

我发现了 这个不是Qt5的问题  而是新版Qt creater的问题
我用Qt4  然后用新版的Qt creater也是要这样设置换成旧版的creater就不会  

#14


现在问题是文件编码是utf-8的,但是有些字还是显示不出来,比如说"用户名:"这个字符串只能显示出"用户"两个字,后面的都是乱码,要么就在"用户名: "后面加个空格就可以了,字数好像只有偶数才能全部显示,不知道怎么回事

#15


引用 楼主 rophie 的回复:
目前试了两种方法
一:QStringLiteral
C/C++ code?1setWindowTitle(QStringLiteral("我是中文"));
二:
C/C++ code?12QTextCodec *codec = QTextCodec::codecForName("GB18030");setWindowTitle(codec->toUnicode("……

你的方法就是好方法,
不过还是少用中文吧

#16


引用 15 楼 wopabe 的回复:
引用 楼主 rophie 的回复:目前试了两种方法
一:QStringLiteral
C/C++ code?1setWindowTitle(QStringLiteral("我是中文"));
二:
C/C++ code?12QTextCodec *codec = QTextCodec::codecForName("GB18030");setWindowTitle(c……


不用中文用翻译?

对了,用QString::toLocal8Bit ()也行

#17


QString::Fromlocal8bit("我是中文")

#18


打错,呵呵……

#19


我也遇到同类问题

#20


引用 12 楼 rophie 的回复:
解决了,只要文件编码是utf-8就不会乱码


是啊 我也发现了,只有源代码文件是UTF8编码的,就不会出问题,

但是我在QT Creator中直接编写代码,怎么才能使输入的内容是UTF8编码的呢?编辑设置里面也没有找到。。。。

有知道的吗?

#21


该回复于2014-09-12 13:29:47被管理员删除

#22


同问+1....

#23


引用 5 楼 liuyuanmei 的回复:
a)  如果以前的源文件编码是GBK的,则需要使用QString::fromLocal8Bit()函数将原来的汉字括起来;或者直接将源文件编码转换成UTF-8的(缺点是MSVC编译器不能方便的使用了)。我使用了使用QString::fromLocal8Bit()来调用的方式(当然了,另写便捷函数或宏来处理)

b) 如果以前的源文件编码是UTF-8的,则什么都不用动。


QT5开发及实例 源代码是UTF-8的,出现编译问题,也是因为中文导致的问题

#24


引用 7 楼 rophie 的回复:
Quote: 引用 2 楼 HeadmasterWang 的回复:

最好的办法是写的时候用英文, 然后lupdate生成ts翻译再lrelease


这么说的话,那我从数据库里读出来显示的中文怎么办呢?不是预先设置的

楼主朋友您好,我现在遇到和您一样的问题,我的开发环境是:Qt5.2+VS2012,也出现中文乱码。
我现在要把数据库中的记录放在界面展示,但是数据库中是有中文的,如何显示呢

#25


setWindowTitle(QString::fromUtf8("我是中文")); //这个可以

setWindowTitle(QString::fromUtf8("我是中")); //这个就不可以,我试了好多,奇数个都不行,它都说有常量换行符,偶数个都可以,

请问是为什么?怎么解决?

#26


首先选中乱码源文件,比如main.cpp。然后点击“编辑”-“Select Encoding”-"utf8"
然后Ctrl+Z,运行一下就是中文了(忽略上栏提示)。我也不知道为什么,反正是可以用的。