QTextCodec中的setCodecForTr等终于消失了 (Qt5) 1+1=2 博客频道 CSDN.NET
分类:
Qt5
Qt
2012-03-06 17:16 1191人阅读 评论(12) 收藏 举报尽管之前零零散散写过一点这方面的内容 ,比如
QString
与中文问题Qt中translate 、tr关系
与中文问题Qt国际化(源码含中文时)的点滴分析
但是,敢死队员还是一批一批的 ... 让人少多有些无奈
症结?
在国内 ,之所以用很多人用这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
参考
http://codereview.qt-project.org/#change,14999
http://codereview.qt-project.org/#change,14626
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!