• 在Qt4中,国内很多新手都喜欢——不分青红皂白地使用如下3行代码
QTextCodec::setCodecForTr(...)
QTextCodec::setCodecForCStrings(...)
QTextCodec::setCodecForLocale(...)

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

  • QString 与中文问题

  • Qt中translate、tr关系 与中文问题

  • Qt国际化(源码含中文时)的点滴分析

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

症结?

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

然后,发现。不对啊,咋全是乱码呢?于是上网搜索,发现其他人用的这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

参考

  • http://codereview.qt-project.org/#change,14999

  • http://codereview.qt-project.org/#change,14626

转自:http://blog.csdn.net/dbzhang800/article/details/7325698

QTextCodec中的setCodecForTr等终于消失了 (Qt5)相关推荐

  1. 王者荣耀android看不见iOS,王者荣耀转区功能来了!iOS和安卓这个限制,终于消失了...

    原标题:王者荣耀转区功能来了!iOS和安卓这个限制,终于消失了 大家好,我是波老师.今年国内外手机厂商们高产似母猪,新手机出得勤快,一波接一波.虽然波老师暂时没有换新手机的打算,但身边的朋友有啊.这人 ...

  2. Pytorch中的序列化容器-度消失和梯度爆炸-nn.Sequential-nn.BatchNorm1d-nn.Dropout

    Pytorch中的序列化容器-度消失和梯度爆炸-nn.Sequential-nn.BatchNorm1d-nn.Dropout 1. 梯度消失和梯度爆炸 在使用pytorch中的序列化 容器之前,我们 ...

  3. unity 渐变消失_Shader Forge中怎么调整time渐变消失的间隔

    求助 显示全部标签 搜索中出现以下关键词标签即可被搜索引擎找到 楼主可在左边的[标签]按钮中添加 希望搜索结果同时满足多个条件,可用空格隔开 求助 Shader Forge中怎么调整time渐变消失的 ...

  4. Win7中右下角“小喇叭”声音图标消失的解决方法?(已解决)

    Win7中右下角"小喇叭"声音图标消失的解决方法?(已解决) 1.打开任务管理器. 2.右键explorer.exe选择右键结束. 3.在按ctrl+shift+Esc,或者用al ...

  5. 关于网络连接中WiFi连接选项突然消失的解决方法(Win10)

    电脑开机之后找不到WiFi,也就是网络连接中WiFi连接选项突然消失的现象我已经遇到了好几次,甚至有一次上网上到一半突然就断了,发现WiFi连接选项消失了.这种情况重启一下电脑通常就能恢复,但问题其实 ...

  6. 深度学习中的激活函数与梯度消失

    转载请注明出处:http://www.cnblogs.com/willnote/p/6912798.html 前言 深度学习的基本原理是基于人工神经网络,信号从一个神经元进入,经过非线性的激活函数,传 ...

  7. idea中右侧的Maven框消失了

    我掉 芭比Q了 idea中右侧的maven框居然没了 消失不见了 跟一束烟似的 没了 解决(网上找的)

  8. 美国如果把根域名服务器封了,中国会从网络上消失?

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  9. yml避坑,yml配置使用map,如果key中包含某些符号会消失不见

    在项目中有时候需要在yml配置文件中配置map,但是有些符号如果使用在map的key中,这些符号就会消失.下面看一下演示: 配置文件: local:map:'111|222': 1 然后通过配置类读取 ...

最新文章

  1. python 回归 显著_指南 | 量化选股with Python(2) 回归分析
  2. ES5-1 发展史、ECMA、编程语言、变量、JS值
  3. java 双重检查加锁弊端
  4. bufferedreader读取中文乱码_python之pandas模块关于csv文件乱码问题解决
  5. 小型elf Hello,World程序
  6. EasyUi之datagrid常见使用
  7. pytorch得到中间层输出
  8. 【二分法】计蒜客:切割钢管
  9. 以后装个云集群和云节点啥的太简单了(ubuntu)
  10. 任正非谈鸿蒙系统06 新闻,任正非首谈华为鸿蒙操作系统:很有可能比安卓和苹果还要快!...
  11. H5自适应简约浪漫婚礼邀请函HTML源码
  12. mysql的pdb文件在哪里_pdb是什么文件?pdb数据库文件怎么打开?
  13. 开源视频服务器软件MJPG-streamer研究
  14. 面向对象基础9(继承与继承语法)
  15. Ambari Server重启报错的解决办法
  16. TouTiao开源项目 分析笔记15 新闻详情之两种类型的实现
  17. 孕妈妈春季饮食有哪些忌讳 孕妈妈春天不适合吃的东西
  18. 计算机主板上的模块安装和拆,更换计算机主板上的内存模块插槽需要多少费用?...
  19. android自定义插值器_自定义缓动插值器,可在Android中实现有意义的动作
  20. 黄宇清 java_二面笔记 2015.9.19

热门文章

  1. 【opencv】14.cv::cvtColor函数转换颜色空间时使用CV_RGB2BGR与CV_BGR2RGB结果一样的原因
  2. 吴恩达的视频课程做成了文字版 ~~~
  3. 原子操作类AtomicInteger详解
  4. LinkedList 源码分析(JDK 1.8)
  5. 深度学习教程 TensorFlow and Deep Learning Tutorials
  6. JavaScript的5种调用函数的方法
  7. 编程之美-数组循环移位
  8. OpenCV中OrbDescriptorExtractor
  9. python+selenium中webdriver相关资源
  10. 深度学习目标检测系列:RCNN系列算法图解