【发布时间】:2021-05-21 12:47:09
【问题描述】:
我正在尝试使用 G++ 编译一个简单的 C++ 程序。我正在运行 Windows 10 并且我已经安装了 MinGW。因此,我尝试通过在命令提示符中键入 g++ "C:\Users\Vesk\Desktop\Информатика\Hello World.cpp" -o "C:\Users\Vesk\Desktop\Информатика\Hello World.exe" 来使用 G++ 编译此文件 C:\Users\Vesk\Desktop\Информатика\Hello World.cpp。 G++ 虽然没有编译文件并给了我这个错误信息:
g++: error: C:\Users\Vesk\Desktop\???????????\Hello World.cpp: Invalid argument
g++: fatal error: no input files
compilation terminated.
'Информатика' 只是一个西里尔字母,所以我很困惑问题是什么。但后来我只是将“Информатика”文件夹重命名为“Informatics”。我尝试使用g++ "C:\Users\Vesk\Desktop\Informatics\Hello World.cpp" -o "C:\Users\Vesk\Desktop\Informatics\Hello World.exe" 再次编译该文件。你瞧,它奏效了。 G ++编译了该文件,可执行文件在文件夹中并且正在运行。但是,如果文件的路径包含西里尔文(或其他 Unicode)字符,是否有任何方法可以实际编译文件?如果有,怎么做?
【问题讨论】:
-
在命令提示符窗口
chcp中运行时您会看到什么,以显示 Windows 命令处理器默认使用的code page,根据为您的帐户配置的国家/地区和下一个dir "%UserProfile%\Desktop" /AD /B?我想chcp输出855 或 872 或 866 并且 g++ 期望使用 UTF-8 编码的西里尔字母,如 Linux 或代码页 Windows-1251。 -
在命令提示符窗口中使用
chcp 65001设置 UTF-8 用于字符编码然后运行 g++ 会发生什么? -
@Mofi 当我运行
chcp时,它说我的活动代码页是 437。我真的不知道那是什么,但我的 Windows 设置为英语。我尝试运行chcp 65001,然后再次尝试在旧文件夹上运行 g++,但它给了我同样的错误。 -
好吧,北美 OEM code page 437 绝对不是您在文件/文件夹名称中使用西里尔字母时应该使用的代码页,因为此代码页(表格)不支持这些字符完全没有。您可以像我一样使用英语 Windows,但您应该为您的国家/地区配置正确的地区/国家。参见例如How to change country or region home location in Windows 10。
-
在正确配置国家后重新启动 Windows。然后打开命令提示符窗口并再次运行
chcp。现在应该输出我在第一条评论中已经写过的 OEM 代码页之一。它也可以在命令提示符窗口中使用chcp 855或chcp 866将代码页从437更改为支持西里尔字母的代码页,然后使用 MinGWg++。但更好的是正确配置国家或继续使用美国,不要在文件/文件夹名称中使用西里尔字母。
标签: cmd unicode character-encoding g++ mingw