【问题标题】:MinGW64 - Unicode source file errors?MinGW64 - Unicode 源文件错误?
【发布时间】:2018-10-08 23:55:07
【问题描述】:

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

谢谢, 雷

【问题讨论】:

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


【解决方案1】:

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

就是这样。具体来说,它采用小端 UTF-16 编码。

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

这与 Windows 或语言环境无关,它仅限于 Visual Studio。

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

-finput-charset

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2017-01-10
    • 2015-09-01
    • 2017-06-03
    • 2021-10-04
    • 2018-01-26
    相关资源
    最近更新 更多