源文件的编码会对编译结果有影响
結(jié)論:
1、Source Insight 3.50.63 不能顯示編碼為UTF8的源文件中的中文字符。ANSI編碼的文件中的中文字符能正常顯示。(最新的3.50.64版本也有同樣問題)
2、Windows下無論源代碼文件是UTF8還是ANSI,對編譯結(jié)果無影響。
3、Linux下源代碼文件是UTF8的中文顯示正常,ANSI的中文亂碼。
正文:(發(fā)現(xiàn)問題的經(jīng)過)
今天偶然發(fā)現(xiàn),在SI中,中文字符串顯示為亂碼。
但如果用notepad打開該文件,則不是亂碼。從notepad打開的界面中復(fù)制到SI中,也不是亂碼。
據(jù)此,可以推測,該文件保存為某種編碼,使得SI不能正確顯示。
用UE打開該文件,另存一個為ANSI格式的文件KtvMainScreen1.cpp:
然后再在SI中打開,中文顯示正常了。
然后用BC打開,發(fā)現(xiàn):原來的SI中亂碼的文件是UTF-8格式的。
把左邊選擇為ANSI才能顯示正常:
能否用另存的文件來代替原來的文件進(jìn)行編譯呢?那樣會不會在軟件中出現(xiàn)亂碼?
后來,用下面代碼測試中文顯示,有一種寫法中文顯示正常。
#include <QApplication>
#include <QPushButton>
#include <QString>
int main(int argc, char *argv[])
{
??? QApplication app(argc, argv);
??? //QPushButton hello(QObject::trUtf8("世界您好!")); //Win7下運(yùn)行時中文亂碼
??? //QPushButton hello(QObject::tr("世界您好!"));//Win7下運(yùn)行時中文亂碼
??? QPushButton hello(QString::fromLocal8Bit("世界您好!"));//Win7下中文顯示正常
??? hello.resize(100, 30);
??? hello.show();
??? return app.exec();
}
該文件為ANSI存儲。另存為UTF8版本,編譯后,中文顯示仍然正常。
但二進(jìn)制比較該源文件時,可以發(fā)現(xiàn)UTF8比ANSI每個漢字多一個字節(jié)。
由此可知,Windows上,源代碼文件為UTF8還是ANSI編碼,編譯后都不會有亂碼。
然后在Linux上也把兩種文件都編譯一次,發(fā)現(xiàn)UTF8的文件,中文正常;ANSI的文件,中文亂碼。
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的源文件的编码会对编译结果有影响的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络爱情
- 下一篇: 硬盘重新分区后有一个分区表信息丢失的数据