QTextCodec中的setCodecForTr等终于消失了 (Qt5)
- 在Qt4中,國內(nèi)很多新手都喜歡——不分青紅皂白地使用如下3行代碼
QTextCodec::setCodecForTr(...) QTextCodec::setCodecForCStrings(...) QTextCodec::setCodecForLocale(...)
盡管之前零零散散寫過一點這方面的內(nèi)容,比如
-
QString 與中文問題
-
Qt中translate、tr關(guān)系 與中文問題
-
Qt國際化(源碼含中文時)的點滴分析
但是,敢死隊員還是一批一批的 ... 讓人少多有些無奈
癥結(jié)?
在國內(nèi),之所以用很多人用這3行代碼,是因為他們在源代碼的const?char*這種窄字符串中使用了中文。
然后,發(fā)現(xiàn)。不對啊,咋全是亂碼呢?于是上網(wǎng)搜索,發(fā)現(xiàn)其他人用的這3行代碼
于是,加上試試。發(fā)現(xiàn):在自己的當前環(huán)境下(固定系統(tǒng)、固定地區(qū)語言設(shè)置、固定編譯環(huán)境)還真的沒有亂碼了。
于是乎?完全不考慮那3行代碼的作用了,反正自己能用就行了,管它什么副作用呢!!
Qt5
在Qt5中,這個問題終于不復(fù)存在了,因為
這兩個函數(shù)
QTextCodec::setCodecForTr(...) QTextCodec::setCodecForCStrings(...)被直接去掉了。
這樣一來,受影響的直接是如下代碼了:
QString s1 = "我是中文"; QString s2("我是中文"); QString s3 = QObject::tr("我是中文")好消息/壞消息?
-
壞消息:
現(xiàn)在Qt5中盡管去掉了setCodecXXX這兩個函數(shù),但是默認編碼還是latin1。如果你要想使用
"我是中文"這樣的字符串,必須自己使用QTextCodec或這QString::fromXXX 這種東西進行轉(zhuǎn)換
-
好消息?是:
Qt5發(fā)布之時,默認將會是utf8編碼,完全可以將你從Qt編碼問題解放出來。
-
壞消息,如果使用的是 MSVC2005/2008/2010,可能無法使用utf8編碼,于是
下面的代碼
QString s1 = "我是中文"; QString s2("我是中文"); QString s3 = QObject::tr("我是中文")將不會工作。
- 因為從MSVC2005起,你無法給編譯器設(shè)置字符串要使用的編碼。盡管2003之前,也無法設(shè)置,但是它會遵循源碼文件的編碼。而2005就自作聰明了,即使你源碼文件保存成不帶BOM的utf8,它都會試圖幫你轉(zhuǎn)換一下。
-
好消息是什么呢?
如果你在Windows下,且使用的是MinGW,那么只要你將源碼文件保存成utf8,前面的代碼將直接可以工作(無須其他設(shè)置)
如果你在其他平臺了,那么應(yīng)該都默認是utf8文件。同樣無須進行設(shè)置。
-
好消息
如果你的編譯器支持C++11,那么,你可以直接使用
QString s = u8"我是中文";
-
壞消息
主流編譯器還都不怎么支持C++11
參考
-
http://codereview.qt-project.org/#change,14999
-
http://codereview.qt-project.org/#change,14626
轉(zhuǎn)自:http://blog.csdn.net/dbzhang800/article/details/7325698
總結(jié)
以上是生活随笔為你收集整理的QTextCodec中的setCodecForTr等终于消失了 (Qt5)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web学习第一天:Servlet+JSP
- 下一篇: Linux下编译opencv