MinGW64-Unicode源文件错误?

时间:2018-10-08 23:55:08

标签: c++ visual-studio unicode mingw-w64

我从一个在Visual Studio 2017中创建它的学生那里收到了一个C ++源代码文件,该文件在他的计算机上正确编译和链接。作为测试,我也使用VS2017,Clang v7.0.0,Intel Parallel Studio XE 2019和g ++(x86_64-posix-seh-rev0,由MinGW-W64项目构建)中的每一个在Windows 10计算机上编译了它。除了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文件,但是我也会给他们一些信息,说明在这种情况发生时如何避免这样做。我会上载实际的源代码文件,但在此网站上找不到解决方法。

谢谢, 雷

1 个答案:

答案 0 :(得分:2)

  

我的第一个猜测是这是一个Unicode文件

就是这样。具体来说,它是以小尾数UTF-16编码的。

  

我的假设是,他的Windows 10配置或VS中的某些设置,或者可能两者兼而有之,都会导致生成这种类型的文件,这可能是默认的语言/区域设置。

这与Windows或语言环境无关,仅在Visual Studio中严格。

  

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

-finput-charset

  

如果Windows或VS中的某些设置导致这些类型的文件由VS编辑器生成,特别是必须更改哪些内容才能仅创建纯ASCII文件?

请参阅Visual Studio 2017文档中的以下文章: