Windows 使用什么编码来传递给在 cmd.exe 窗口中启动的程序的命令行参数?
命令行参数的编码似乎不受使用控制台代码页设置的影响chcp
(我将其设置为 UTF-8、代码页 65001 并使用 Lucida Console 字体。)
如果我将 UTF-8 文件中编码为十六进制 E28093 的 EN DASH 粘贴到命令行中,它会在 cmd.exe 窗口中正确显示。但是,当它传递给程序时,它似乎被转换为十六进制 96(ANSI 表示形式)。如果我将西里尔字符粘贴到命令行中,它们也会正确显示,但在程序中显示为问号(十六进制 3F。)
如果我复制命令行并将其粘贴到文本文件中,则生成的文件是 UTF-8;它包含与源文件相同的 EN DASH 和西里尔字符编码。
看来粘贴到 cmd.exe 窗口中的字符是使用选择的代码页捕获并显示的chcp
,但在将字符作为参数传递给程序之前,会使用一些 ANSI 代码页将字符转换为不同的编码。显然无法转换的字符会默默地转换为问号。
因此,如果我想正确处理程序中的命令行参数,我需要确切地知道参数的编码是什么。例如,如果我希望将命令行参数与从文件读取的已知 UTF-8 数据进行比较,我需要将参数从正确的编码转换为 UTF-8。谢谢。
如果您的目标是比较 Unicode 字符,那么您应该调用GetCommandLineW
在你的程序中(或使用wmain
以便argv
使用 wchar_t),然后将此 UTF-16LE 命令行字符串转换为 UTF-8,反之亦然。
GetCommandLineA
可能用 CP_ACP 转换 Unicode 源字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)