MinGW64 - Unicode 源文件错误?



我从一位在Visual Studio 2017中创建它的学生那里收到了一个C++源代码文件,它在他的机器上正确编译和链接。 作为测试,我也在我的Windows 10机器上使用VS2017,Clang v7.0.0,Intel Parallel Studio XE 2019和g ++(x86_64-posix-she-rev0,由MinGW-W64项目构建(8.1.0编译了它。 除了MinGW-W64之外,它编译得很好,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 中的某些设置,或者两者兼而有之,导致生成这种类型的文件,可能是默认语言/区域设置选择。 因此,我有两个问题:

  1. MinGW-W64配置中是否有一些设置可以允许它处理这些类型的文件而不会像VS,Intel和Clang那样抱怨? 如果是这样,它是什么?

  2. 如果 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 文档中的以下文章:

  • 编码和行尾

  • 使用编码保存和打开文件

  • /utf-8(将源字符集和可执行字符集设置为 UTF-8(

最新更新