[英]MinGW64 - Unicode source file errors?
我從我的一個學生那里收到了一個 C++ 源代碼文件,他在 Visual Studio 2017 中創建了它,它在他的機器上正確編譯和鏈接。 作為測試,我也在我的 Windows 10 機器上使用 VS2017、Clang v7.0.0、Intel Parallel Studio XE 2019 和 g++(x86_64-posix-seh-rev0,由 MinGW-W64 項目構建)8.1.0 中的每一個編譯了它。 除了 MinGW-W64 之外,它編譯得很好,它產生了許多錯誤和警告,如下所示:
C:\temp>g++.exe -c MyFile.cpp
MyFile.cpp:1:1: error: stray '\377' in program
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:2: error: stray '\376' in program
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:3: error: stray '#' in program
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:4: warning: null character(s) ignored
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:6: warning: null character(s) ignored
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:8: warning: null character(s) ignored
■# i n c l u d e < i o s t r e a m >
^
我用十六進制編輯器查看了源代碼文件,發現前兩個字節的十六進制值分別為 FF 和 EF。 之后,每個 ASCII 字節前面都有一個 00 字節。 我的第一個猜測是這是一個 Unicode 文件(或類似的東西)。
我的假設是,他的 Windows 10 配置或 VS 或兩者中的某些設置導致生成此類文件,可能是默認語言/區域設置選擇。 因此,我有兩個問題:
MinGW-W64 配置中是否有一些設置允許它處理這些類型的文件而不會像 VS、Intel 和 Clang 已經做的那樣抱怨? 如果是,那是什么?
如果 Windows 或 VS 中的某些設置導致 VS 編輯器生成這些類型的文件,那么必須更改哪些內容才能僅創建純 ASCII 文件?
我總是不鼓勵學生僅僅因為這樣的問題就生成 Unicode 文件,但我也會給他們一些信息,告訴他們如何在發生這種情況時避免這樣做。 我會上傳實際的源代碼文件,但我找不到在這個網站上做的方法。
謝謝,雷
我的第一個猜測是這是一個 Unicode 文件
正是如此。 具體來說,它以小端 UTF-16 編碼。
我的假設是,他的 Windows 10 配置或 VS 或兩者中的某些設置導致生成此類文件,可能是默認語言/區域設置選擇。
這與 Windows 或語言環境無關,它僅在 Visual Studio 中嚴格執行。
MinGW-W64 配置中是否有一些設置允許它處理這些類型的文件而不會像 VS、Intel 和 Clang 已經做的那樣抱怨? 如果是,那是什么?
看看-finput-charset
。
如果 Windows 或 VS 中的某些設置導致 VS 編輯器生成這些類型的文件,那么必須更改哪些內容才能僅創建純 ASCII 文件?
請參閱 Visual Studio 2017 文檔中的以下文章:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.