windows - Windows 命令行参数编码是什么?

标签 windows encoding command-line utf-8

对于传递给在 cmd.exe 窗口中启动的程序的命令行参数,Windows 使用什么编码?

命令行参数的编码似乎不受使用 chcp 设置的控制台代码页的影响。 (我将其设置为 UTF-8,代码页 65001 并使用 Lucida Console 字体。)

如果我将编码为十六进制 E28093 的 EN DASH 从 UTF-8 文件粘贴到命令行中,它会在 cmd.exe 窗口中正确显示。但是,当它传递给程序时,它似乎被转换为十六进制 96(ANSI 表示)。如果我将西里尔字符粘贴到命令行中,它们也会正确显示,但在程序中显示为问号(十六进制 3F)。

如果我复制命令行并将其粘贴到文本文件中,则生成的文件是 UTF-8;它包含与源文件相同的 EN DASH 和 Cyrillic 字符编码。

似乎粘贴到 cmd.exe 窗口中的字符是使用通过 chcp 选择的代码页捕获和显示的。 ,但某些 ANSI 代码页用于将字符转换为不同的编码,然后再将它们作为参数传递给程序。显然无法转换的字符会被默默转换为问号。

所以,如果我想在程序中正确处理命令行参数,我需要确切地知道参数的编码是什么。例如,如果我希望将命令行参数与从文件中读取的已知 UTF-8 数据进行比较,我需要将参数从正确的编码转换为 UTF-8。谢谢。

最佳答案

如果您的目标是比较 Unicode 字符,那么您应该调用 GetCommandLineW在您的程序中(或使用 wmain 以便 argv 使用 wchar_t),然后将此 UTF-16LE 命令行字符串转换为 UTF-8,反之亦然。
GetCommandLineA可能使用 CP_ACP 转换 Unicode 源字符串。

关于windows - Windows 命令行参数编码是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44465412/

相关文章:

regex - Linux 从命令行查找和替换

java - 如何使用 jna 从 java 调用 winapi

linux - 删除目录中超过 1 天的所有文件

command-line - 试图找到一种简单的方法来通过FTP仅上传修改后的文件

r - 如何让 Windows 识别到 R 中的 "pt_br.utf-8"

json - 如何确定 JSON.stringify() 使用哪种编码?

ios - 如何将 NSData 编码为字符串

从目录和子目录中删除超过 x 个文件的 Windows 脚本

linux - D可以编译成平台独立代码吗?

windows - 闪存驱动器上的批处理文件 - 如何检查操作系统架构?