cmd - 如何将 Unicode 参数传递给 G++?

标签 cmd unicode character-encoding g++ mingw

我正在尝试使用 G++ 编译一个简单的 C++ 程序。我运行的是 Windows 10,并且已经安装了 MinGW。因此,我尝试使用 G++ 编译此文件 C:\Users\Vesk\Desktop\Информатика\Hello World.cpp,输入 g++ "C:\Users\Vesk\Desktop\Информатика\Hello World.cpp"-o "C:\Users\Vesk\Desktop\Информатика\Hello World.exe"在命令提示符中。 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)字符,是否有任何方法可以实际编译该文件?如果是这样,怎么办?

最佳答案

Windows 使用 UTF-16 作为 Unicode 文件名。据我所知,它不支持 UTF-8 作为语言环境,尽管这非常有用。

我尝试了一个非常旧的 MinGW G++ 4.6.3,实际上它不支持当前语言环境之外的文件路径中的 Unicode 字符。不知道最近的 MinGW GCC。第一个可能的解决方案是使用俄语语言环境。

为了让 Windows 应用程序正确支持 Unicode 文件名,它需要将路径处理为 wchar_t 宽字符。例如,int main(int argc, const char* argv[]) 经典签名必须替换为 int wmain(int argc, const wchar_t* argv[])。对于像 GCC 这样的可移植软件来说,这是一个可能不值得的复杂化。极少数人会将字符放入当前语言环境之外的源文件路径中。

我在 Cygwin 上尝试了 G++ 10.2.0,它可以工作。这是因为所有 Cygwin 软件都与 cygwin1.dll 链接,它与其他服务一起自动将所有 UTF-8 路径转换为 ​​UTF-16。

关于cmd - 如何将 Unicode 参数传递给 G++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67637164/

相关文章:

command-line - 如何从批处理脚本中运行批处理脚本?

command-line - 脚本化驱动器信息到文本文件适用于 win7 和 server2008,但不适用于 XP

c++ - utext_openUTF8 返回字符串 "mod-12k"的错误;

javascript - 匹配任何非单词字符(不包括变音符号)

PHP/HTML 显示隐藏字符

php - iconv() 对比utf8_encode()

python - cURL 流作为 python 模块的标准输入

perl - Powershell调用命令脚本返回码

c# - 使用 SendInput 发送 U+FFFF 之外的 unicode 字符

ruby-on-rails - 将字符串 "2½"(两个半)转换为 2.5