`

QTextCodec中的setCodecForTr等终于消失了 (Qt5)

 
阅读更多
  • 在Qt4中,国内很多新手都喜欢——不分青红皂白地使用如下3行代码

QTextCodec::setCodecForTr(...)
QTextCodec::setCodecForCStrings(...)
QTextCodec::setCodecForLocale(...)

尽管之前零零散散写过一点这方面的内容,比如

但是,敢死队员还是一批一批的 ... 让人少多有些无奈

症结?

在国内,之所以用很多人用这3行代码,是因为他们在源代码的constchar*这种窄字符串中使用了中文。

然后,发现。不对啊,咋全是乱码呢?于是上网搜索,发现其他人用的这3行代码

于是,加上试试。发现:在自己的当前环境下(固定系统、固定地区语言设置、固定编译环境)还真的没有乱码了。

于是乎?完全不考虑那3行代码的作用了,反正自己能用就行了,管它什么副作用呢!!

Qt5

在Qt5中,这个问题终于不复存在了,因为

这两个函数

QTextCodec::setCodecForTr(...)
QTextCodec::setCodecForCStrings(...)

被直接去掉了。

这样一来,受影响的直接是如下代码了:

QString s1 = "我是中文";
QString s2("我是中文");
QString s3 = QObject::tr("我是中文")

好消息/坏消息?

  • 坏消息

现在Qt5中尽管去掉了setCodecXXX这两个函数,但是默认编码还是latin1。如果你要想使用

"我是中文"

这样的字符串,必须自己使用QTextCodec或这QString::fromXXX 这种东西进行转换

  • 好消息是:

Qt5发布之时,默认将会是utf8编码,完全可以将你从Qt编码问题解放出来。

  • 坏消息,如果使用的是 MSVC2005/2008/2010,可能无法使用utf8编码,于是

下面的代码

QString s1 = "我是中文";
QString s2("我是中文");
QString s3 = QObject::tr("我是中文")

将不会工作。

  • 因为从MSVC2005起,你无法给编译器设置字符串要使用的编码。尽管2003之前,也无法设置,但是它会遵循源码文件的编码。而2005就自作聪明了,即使你源码文件保存成不带BOM的utf8,它都会试图帮你转换一下。
  • 好消息是什么呢?

如果你在Windows下,且使用的是MinGW,那么只要你将源码文件保存成utf8,前面的代码将直接可以工作(无须其他设置)

如果你在其他平台了,那么应该都默认是utf8文件。同样无须进行设置。

  • 好消息

如果你的编译器支持C++11,那么,你可以直接使用

QString s = u8"我是中文";
  • 坏消息

主流编译器还都不怎么支持C++11

参考


分享到:
评论

相关推荐

    运用Qzxing调用识别二维码,能识别中文!

    QTextCodec::setCodecForTr QTextCodec::codecForName "UTF 8" ; 否则不能识别中文的;">运用Qzxing调用识别二维码 能识别中文 QZxing源码附在里面了 QT的main里面记得头上写 QTextCodec::...

    QT中文显示问题

    QTextCodec::setCodecForTr(QTextCodec::codecForLocale( )); 显示中文前加这句 中文加tr

    QT多线程技术读取文档内容到程序里

    #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) #if _MSC_VER QTextCodec *codec = QTextCodec::codecForName("GBK"); #else QTextCodec *codec = QTextCodec::codecForName("UTF-8"); #endif QTextCodec::...

    qt4.6.3显示中文的问题

    如果是在X86平台上时候,使用QTextCodec::setCodecForTr(QTextCodec::codecForLocale());来设置显示中文

    嵌入式Qt开源中文输入法

    syszuxpinyin是一款开源的嵌入式qt输入法,原版一直存在一个乱码的问题,现在qt一般设置为UTF-8编码,可是该输入法只支持GBK编码,所以对其进行稍微修改了下,支持UTF-8编码,亲测不再乱码,代码中需要指定编码方式...

    qtcsv:用于在Qt中读取和写入csv文件的库

    qtcsv:用于在Qt中读取和写入csv文件的库

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    并在logindlg.cpp 中加入#include <QtGui>的头文件。如果不加这个头文件, QMessageBox 类不可用。 9.这时再执行程序,输入用户名为qt,密码为123456,按登录按钮便能进入主 窗口了,如果输入错了,就会弹出警告...

    Python PyQt4实现QQ抽屉效果

    本文实例为大家分享了Python PyQt4实现QQ抽屉效果展示的具体代码,供大家参考,具体内容如下 ...QTextCodec.setCodecForTr(QTextCodec.codecForName(utf8)) class MyQQ(QTabWidget): def __init__(self,parent=None)

    qt开发与设计(通信工程)

    使用qt软件完成程序设计#include "widget.h" #include "client.h" #include #include <QTextCodec> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForLocale...

    qt的中文显示问题及解决方法

    在QT中可以直接QTextCodec来转换字符串的编码,这为在QT下开发中文软件带来了便利条件,不过这种方法不符合国际化/本地化的标准,最直接的方法是把整个应用程序的编码设置为GBK编码

    QT结合mqtt协议的客户端应用编程

    为初学mqtt或qt的小伙伴提供一个参考方向,本人也是学习者,有写的不好的地方批评指正。 mqtt的原理和应用程序开发过程通过本程序就能体现,看懂mqtt的主题订阅发布之后,再去看官方的编程手册开发上手就会很简单啦...

    Qt笔记本源码

    #include <QTextCodec> #include #include #include #include #include #include <QtDebug> #include #include #include #ifndef QT_NO_PRINTER #include #include #include #endif #include "textedit....

    qt简单的邮件发送客户端

    #include <QtNetwork/QTcpSocket> #include <QTextCodec> #include #include #include #include #include enum SMTPCMD{SMTP_EHLO = 0 , SMTP_AUTHLOGIN , SMTP_MAIL , SMTP_RCPT , SMTP_DATA ...

    Qt工作笔记-Qt5中中文编码方面的笔记

    如果没有指定本地字符集,在qtcreator上开发或者其他Qt项目上,使用的是UTF-8编码,就算去toStdString()也是to到了UTF-8编码。 使用这个函数去设置项目的字符集: QTextCode::setCodecForLocale(QTextCodec::...

    QT windows32位可用的web服务器 C++ 内含部署说明

    部署方式:(详细见文件... settings->setIniCodec(QTextCodec::codecForName("utf-8")); settings->setValue("host","192.168.25.188"); settings->setValue("port",5007); settings->setValue("minThreads","4");

    嵌入式系统/ARM技术中的qt程序中文国际化

     中文国际化是在QT程序设计中很重要的一个环节,这里用一个简单的例子介绍中文国际化得过程。  在这里我们还是写一个经典的helloworld的例子。  zh_CN.cpp  #include  #include  #include <QTextCodec>...

    Qt 扩展ASCII表与八进制、十六进制间转换

    QTextCodec 字符编码与16进制数据转换 QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QString string = codec->toUnicode(encodedString); QByteArray encodedString = codec->fromUnicode(string);

    SP-Flash-Tool-src:MTK的SP Flash Tool v5.1720源代码

    必需:QT WebKit和QTextCodec :: setCodecForTr()和QTextCodec :: setCodecForCStrings() SP Flash Tool-用于为基于MTK的智能手机刷新固件的程序。 快捷键:SP_Flash_Tool_src SP_Flash_Tool源代码

    用vs2010编译好的ICU库

    2、ICU(International Components for Unicode)是一个国际化的字符编码和转化的库。...3、Qt的QTextCodec的toUnicode方法也采用了这个库来封装 3、压缩包里有icu4c-49_1_2-src.zip源码包以及用vs2010编译好的dll lib

    kcodecs:https:github.comKDEkcodecs.git

    KCodecs 字符串编码库 介绍 KCodecs提供了使用各种编码来操作字符... 它可以自动确定字符串的字符集,转换XML实体,验证电子邮件地址,并以比QTextCodec更宽容的方式按名称查找编码(例如,用于来自Internet的数据)。

Global site tag (gtag.js) - Google Analytics