程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 源文件的編碼會對編譯結果有影響

源文件的編碼會對編譯結果有影響

編輯:關於C語言

結論:

1、Source Insight 3.50.63 不能顯示編碼為UTF8的源文件中的中文字符。ANSI編碼的文件中的中文字符能正常顯示。(最新的3.50.64版本也有同樣問題)

2、Windows下無論源代碼文件是UTF8還是ANSI,對編譯結果無影響。

3、Linux下源代碼文件是UTF8的中文顯示正常,ANSI的中文亂碼。

正文:發現問題的經過)

今天偶然發現,在SI中,中文字符串顯示為亂碼。

image

但如果用notepad打開該文件,則不是亂碼。從notepad打開的界面中復制到SI中,也不是亂碼。

據此,可以推測,該文件保存為某種編碼,使得SI不能正確顯示。

用UE打開該文件,另存一個為ANSI格式的文件KtvMainScreen1.cpp:

image

然後再在SI中打開,中文顯示正常了。

然後用BC打開,發現:原來的SI中亂碼的文件是UTF-8格式的。

image
把左邊選擇為ANSI才能顯示正常:

image

能否用另存的文件來代替原來的文件進行編譯呢?那樣會不會在軟件中出現亂碼?

後來,用下面代碼測試中文顯示,有一種寫法中文顯示正常。

#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每個漢字多一個字節。

image

由此可知,Windows上,源代碼文件為UTF8還是ANSI編碼,編譯後都不會有亂碼。

然後在Linux上也把兩種文件都編譯一次,發現UTF8的文件,中文正常;ANSI的文件,中文亂碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved