轉(zhuǎn)自:http://www.ctogo.net/313.html
WOWCode的主體部分基本已經(jīng)完成了,對(duì)于我自己來說,其實(shí)已經(jīng)足以應(yīng)付我的需要了,不過如果發(fā)布的話,實(shí)在還是拿不出手,因?yàn)楹芏嗟胤竭€需要完善,一些對(duì)我自己來說多余的功能也沒有完成,今天嘗試將程序移植到了另一臺(tái)機(jī)子上,卻出現(xiàn)了中文亂碼問題,記錄之。
也許你在用這個(gè)方法實(shí)現(xiàn)中文化,但它確實(shí)不夠嚴(yán)謹(jǐn)
Laguage» C++ Title» 出現(xiàn)頻率最高的辦法
- #include <QTextCodec>
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- //設(shè)置中文開始
- QTextCodec::setCodecForTr(QTextCodec::codecForName(“gb18030″));
- //設(shè)置中文結(jié)束
- return app.exec();
- }
很多地方都會(huì)告訴你,這樣可以實(shí)現(xiàn)QT支持中文,包括我看的教程書上也是,他甚至告訴我要支持中文必須加入這段代碼,但我想告訴你,這個(gè)辦法是有問題的,而且這個(gè)問題還不小!我在兩臺(tái)同樣是XP系統(tǒng)的機(jī)子上移植就出現(xiàn)了中文亂碼問題,而且所有中文都是用了tr()的。所以請(qǐng)別迷信那些教程,實(shí)踐才是真理!
你可以嘗試這個(gè)方法
Laguage» C++ Title»
- #include <QTextCodec>
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- //設(shè)置中文開始
- QTextCodec *codec = QTextCodec::codecForName(“GB2312″);
- QTextCodec::setCodecForLocale(codec);
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
- //設(shè)置中文結(jié)束
- return app.exec();
- }
雖然這個(gè)方法看似更為嚴(yán)謹(jǐn),你可以嘗試,不過這么寫還是會(huì)有問題,至少?zèng)]有解決我的問題。這也是我網(wǎng)上看到的出現(xiàn)頻率也挺高的方法,不過我想說的是:其實(shí)這個(gè)辦法治標(biāo)不治本,因?yàn)樗竺嬷皇菍?duì)拓寬對(duì)中文支持的范圍,而一般我們都建議把中文寫在tr(“”)里。
推薦個(gè)比較保險(xiǎn)的辦法
Laguage» C++ Title» 我推薦的方法
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QTextCodec *codec = QTextCodec::codecForName(“System”); //獲取系統(tǒng)編碼
- QTextCodec::setCodecForLocale(codec);
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
- return a.exec();
- }
這里獲取了系統(tǒng)字體編碼,解決了我的問題,個(gè)人也覺得這個(gè)辦法應(yīng)該是個(gè)不錯(cuò)的解決方案。
也可能是字體選擇不當(dāng)造成的亂碼
如果你始終解決不了亂碼問題,可以嘗試設(shè)置下字體,但其實(shí)是否是字體造成的亂碼的方法很簡(jiǎn)單,如果出現(xiàn)的是一個(gè)個(gè)方塊,便是字體設(shè)置不當(dāng),否則,優(yōu)先考慮編碼設(shè)置。