作者:wangxinus, <wangxinus@gmail.com>
來源:http://wangxinus.cublog.cn
說明:原創(chuàng)文章歡迎轉(zhuǎn)載,交流請Email給作者
最近的一個程序中要用到國語語言的文本文件,包括泰文,日文,越南等等。很郁悶的是以前所有的文件都是本地編碼,所以在處理這些文件的時候,都必須轉(zhuǎn)換成unicode編碼。還好在Qt中這很容易辦法,QTextStream::setCodec()就可以了。
在發(fā)布這個程序的時候,很奇怪的問題是在我PC上運行一切OK,在同事電腦上處理出來的數(shù)據(jù)和我不一樣。英文,中文都是正確的。日文卻是錯誤的。這讓我始料未及。在程序中找了一天的,沒有發(fā)現(xiàn)什么問題。最后猜測問題可能處在Qt上。因為我電腦上裝了Qt的SDK,而同事電腦上沒有。
難道是需要的DLL沒有發(fā)布完?但是程序運行沒問題。
我想起Qt中帶了很多插件(Plugin),于是在Qt目錄下的"qt\plugins"下果然發(fā)現(xiàn)一個"codecs"的文件夾。下面的文件從文件名就可以區(qū)別出來是“簡體中文,繁體中文,日文,韓文”的編碼插件。于是我把這個文件夾拷貝到程序的當(dāng)前目錄下,在同事電腦運行,一切OK了。
當(dāng)然,codecs文件下面的".a"文件都可以刪除,".dll"文件也可以把帶"d"的debug版本的刪掉。
注意的是一定要把codecs文件下放在發(fā)布程序的同目錄下,且不要更改目錄名字。
想來,unicode 一共6W多的字符, 中日韓的字符就占了4W多,且和本地編碼都沒有兼用,比如中文的GB18030,所有的轉(zhuǎn)換都需要一一對映,沒有轉(zhuǎn)換的公式。難怪Qt對中日韓的字符都單獨處理了。
plugins文件夾下面還有很多其他的插件:
sqldrivers 數(shù)據(jù)庫連接的
imageformats 圖片格式處理的
codecs 字符編碼處理
............... 還有幾個不列舉了。
總之發(fā)布程序的時候,除了Qt運行的Core和Gui等庫,對一些特殊的處理還要注意是不是帶了相應(yīng)的插件。這很重要