source:http://blog.csdn.net/fldx/article/details/6262172
初接触Qt的程序员,肯定为Qt不能正常输出中文感到郁闷,万能的Qt啊,你为什么连个中文都输出不好呢? 其实,Qt当初的设计有很好的前瞻性,QString内部的存储均是用unicode编码存储的。unicode为什么还不能输出正常的中文呢?
Qt是这样操作的,当你把一个字符串传给QString的构造函数,QString并不知道你这是以何种格式编码的字符串,所以在你没有指定前,它一般都是按照latin1来进行解码并重新编码成unicode,这样你原本的中文当然就被改的面目全非了。所以你必须要指定你源字符串的编码格式。
Qt提供了一个工具类,可以较好的处理这个问题。QTextCodec。
比如说你要把一个“我是一个中国人”转换成QString,怎么做呢?
首先,先构造出一个相应的QTextcodec来,Qt这一块己经用插件的方式给我们提供了一些常用的编码,中文,日文,韩文等。我们中文的最好是用GB18030字库。为什么?因为GB18030的字库全面兼容GB2312,而且里面包含了繁体字。
QTextCodec * codec =QTextCodec::codecForName("GB18030");
QString m = codec->toUnicode("我是一个中国人");
这就好了,这时打印一下m,怎么样,正常了吧。
网上不是有很多人说用什么:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
的吗?
其实,这和我介绍的方法是异曲同工的,我的方法是每个地方你都要去toUnicode一下,这样就特别烦。你在main函数里面加上上面3句只不过是把这个toUnicode全部自动做了一遍。。。。不过上面的三句话也有缺点,如果你的程序里面用到了好几种的编码格式。那还是用我上面的那种toUnicode吧。这样一来,大家就清晰多了吧。。。。