結論:
1、Source Insight 3.50.63 不能顯示編碼為UTF8的源文件中的中文字符。ANSI編碼的文件中的中文字符能正常顯示。(最新的3.50.64版本也有同樣問題)
2、Windows下無論源代碼文件是UTF8還是ANSI,對編譯結果無影響。
3、Linux下源代碼文件是UTF8的中文顯示正常,ANSI的中文亂碼。
正文:發現問題的經過)
今天偶然發現,在SI中,中文字符串顯示為亂碼。
但如果用notepad打開該文件,則不是亂碼。從notepad打開的界面中復制到SI中,也不是亂碼。
據此,可以推測,該文件保存為某種編碼,使得SI不能正確顯示。
用UE打開該文件,另存一個為ANSI格式的文件KtvMainScreen1.cpp:
然後再在SI中打開,中文顯示正常了。
然後用BC打開,發現:原來的SI中亂碼的文件是UTF-8格式的。
把左邊選擇為ANSI才能顯示正常:
能否用另存的文件來代替原來的文件進行編譯呢?那樣會不會在軟件中出現亂碼?
後來,用下面代碼測試中文顯示,有一種寫法中文顯示正常。
#include <QApplication>
#include <QPushButton>
#include <QString>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//QPushButton hello(QObject::trUtf8("世界您好!")); //Win7下運行時中文亂碼
//QPushButton hello(QObject::tr("世界您好!"));//Win7下運行時中文亂碼
QPushButton hello(QString::fromLocal8Bit("世界您好!"));//Win7下中文顯示正常
hello.resize(100, 30);
hello.show();
return app.exec();
}
該文件為ANSI存儲。另存為UTF8版本,編譯後,中文顯示仍然正常。
但二進制比較該源文件時,可以發現UTF8比ANSI每個漢字多一個字節。
由此可知,Windows上,源代碼文件為UTF8還是ANSI編碼,編譯後都不會有亂碼。
然後在Linux上也把兩種文件都編譯一次,發現UTF8的文件,中文正常;ANSI的文件,中文亂碼。