• 在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. 除了组件超配光伏效率还能如何提升?
  2. 从输入url到显示网页,后台发生了什么?
  3. 13走了,14来了,新的一年,新的开始。
  4. html5 去掉 li的样式,css li 去掉点的样式写法
  5. 手把手教你写C语言的动态库的开发
  6. 只导表前10条数据_【205期】面试官:数据量很大的情况下,对于分页查询你有什么优化方案吗?...
  7. Android复习11【service-音乐播放器、定时器、IntentService、ALDL使用】
  8. 极简版 卸载 home 扩充 根分区--centos7 xfs 文件格式
  9. linux怎样扩容目录,Linux系统下对目录扩容的方法介绍
  10. edge浏览器下载位置设置
  11. 2021上半年短视频及电商生态研究报告
  12. python 文件管理_python 文件操作
  13. 银河证券CIO唐沛来:部署ITIL服务流程,让时空穿梭
  14. VPC2007与VServer2005R2比较
  15. Linux 探索之旅 | 第五部分第七课:Shell 实现图片展示网页
  16. itellij jdk多重选择Class JavaLaunchHelper is implemented in both
  17. 基本排序算法(冒泡,选择(希尔),插入,快速,归并,堆,二分查找)
  18. 微信小游戏源码及H5开源小程序游戏源码1000套
  19. 上位机与欧姆龙PLC的Fins tcp通讯
  20. 关于Echarts官网httpsecharts.apache.org打不开的解决方案

热门文章

  1. 【数学与算法】【分段三次Hermite插值】和【分段三次样条插值】
  2. 【Tools】怎样转载博客到CSDN博客(很实用)
  3. 机器学习实战笔记(Python实现)-02-k近邻算法(kNN)
  4. Programming Computer Vision with Python (学习笔记四)
  5. 自己动手实现的 Spring IOC 和 AOP - 下篇
  6. JAVA学习篇--Servlet详解
  7. C# vs C++ 全局照明渲染性能比试
  8. Java内存访问重排序的研究
  9. 深度学习Deep Learning: dropout策略防止过拟合
  10. 自学计算机科学CS总结-by 要有光LTBL