学习《Qt Creator快速入门》第二章第三节一个在窗口中显示汉字的程序时遇到这个问题。按照书上例子一字一句的敲到电脑上,运行后显示乱码;运行作者源程序,汉字显示正常。
程序完全相同,而且是在同一台电脑上运行的,因此想到应该是设置的问题。想起刚打开作者所给源程序的工程文件时,出现过下面的提示:
当时的处理是点击右边的选择编码,出现下面的对话框:
选择第一个,然后点击根据编码重新载入。之后运行一切正常,不过当时并不知道这意味着什么。
因此打算将自己键入的程序设置也做此更改,可是更改时却又提示“无法用‘system’编码解码‘main.cpp’.无法编辑”。
各种摸索仍不能解决,最终在网上发现了http://wenku.baidu.com/view/ac7e85f704a1b0717fd5dd99.html这篇解释,知道问题的根源在于源文件的编码是不同的,而用setCodecForTr函数时,要指定相同的编码。
这样就大概知道原因了。代码中QTextCodec::setCodecForTr(QTextCodec::codecForLocale())用来设置系统(我的理解是操作系统)指定的编码,而我敲入代码时Qt的默认编码是UTF-8,和操作系统指定的编码不同,然后Qt就以错误的方式(应该用UTF-8)翻译了那些汉语,因此显示乱码;而作者给的程序运行后显示正常是因为我在打开项目文件时的那个操作将代码的编码以系统指定的编码(应该就是那个system了)保存了。
知道原因解决就容易多了,敲代码之前将默认编码改为system,或者不改编码,而是指定编码为“UTF-8”即可。
最后,摸索中遇到的以下问题:作者推荐的QTextCodec::setCodecForTr(QTextCodec::codecForName(“gb18030”))也显示乱码,而换成QTextCodec::setCodecForTr(QTextCodec::codecForName(“UTF-8”))显示正常,就知道为什么了。
刚遇见这个问题时都不想管,怕费时间。解决过程也确实颇费周折,不过之间学到不少东西,这是最重要的。