VS Code 中的默认输出文件存储在 UTF 16 LE 中,而默认设置为 UTF-8

Default Output File in VS Code being stored in UTF 16 LE whereas default is set to UTF-8

我正在 windows 10 系统上工作并使用 VS Code。

VS Code -v : 1.48.2
gcc version : gcc (MinGW.org GCC-8.2.0-5) 8.2.0

我正在使用“gcc program.c -o a”(program.c 是 C 文件的名称)编译一个 c 程序。 在终端中输入可执行文件名后,我将 C 文件的输出存储为:

./a > outputFile
1
2
4
6
7

第二行到第六行的数字是输入,outputFile 是我打算存储输出的新文件,否则将显示在 VS Code 终端本身。

我的问题是输出以 UTF-16 LE 格式存储,而我在 VS 代码中的默认编码设置为 UTF-8。

这会导致 git diff 命令将两个文件识别为不同的:

git diff outputFile expectedOutput

留言:

binary files a/outputFile b/expectedOutput differ

鉴于:

fc.exe outputFile expectedOutput

留言:

Resync Failed.Files are too different.

我需要手动将 outputFile 的编码更改为 UTF-8,之后命令会识别出相同的文件。 有没有办法自动将输出存储为 UTF-8 格式?
可重现示例:(主要编辑)

#include <stdio.h>
void main()
{
    printf("1 2 3 4\n");
}//this is a test program named test.c

如果 Bernard 指出的 VSCode 终端默认为 Powershell 并且以下命令序列为 运行:

gcc test.c
./a > out1.txt

输出文件包含 UTF-16LE 格式的输出,可以通过在记事本中打开文本文件并尝试另存为来查看。
如果将终端更改为 cmd 和 运行s 以下命令输出文件以 UTF-8 格式存储输出:

gcc test.c
a.exe > out2.txt

如果选择 git bash 终端并执行以下命令,则会发生同样的情况,输出存储在 UTF-8 中:

gcc test.c
./a > out3.txt

out1.txt 包含 UTF-16LE 格式的输出,out2.txt、out3.txt 包含 UTF-8 格式的输出。 现在我可以更改默认终端并摆脱这个问题。在 Powershell 中修复此问题的方法可能很有用,尽管按照 Bernard 的建议通过 更改默认终端 .

找到了解决方案

它似乎与 Windows PowerShell 有关,Windows 上的 VSCode 默认使用 PowerShell 终端。

目前尚不清楚此问题的根本原因是什么,但有一个简单的解决方法——只需将 VSCode 终端更改为标准 Windows 终端而不是 PowerShell: