Windows使用什么编码来传递给cmd.exe窗口中启动的程序的命令行参数?
命令行参数的编码似乎不受使用chcp
设置的控制台代码页的影响(我将其设置为UTF-8,代码页65001并使用Lucida Console字体。)
如果我将编码为十六进制E28093的EN DASH从UTF-8文件粘贴到命令行,它将在cmd.exe窗口中正确显示。但是,它传递给程序时似乎被转换为十六进制96(ANSI表示)。如果我将西里尔字符粘贴到命令行中,它们也会正确显示,但会在程序中显示为问号(十六进制3F。)
如果我复制命令行并将其粘贴到文本文件中,则生成的文件为UTF-8;它包含与源文件相同的EN DASH和Cyrillic字符编码。
使用chcp
选择的代码页捕获并显示粘贴到cmd.exe窗口中的字符,但是在将字符作为参数传递之前,会使用某些ANSI代码页将字符转换为不同的编码一个程序。无法转换的字符会以静默方式转换为问号。
因此,如果我想在程序中正确处理命令行参数,我需要确切知道参数的编码是什么。例如,如果我希望将命令行参数与从文件读取的已知UTF-8数据进行比较,我需要将参数从正确的编码转换为UTF-8。感谢。
答案 0 :(得分:1)
如果您的目标是比较Unicode字符,那么您应该在程序中调用network
(或使用GetCommandLineW
以便wmain
使用wchar_t)然后转换此UTF-16LE命令行字符串为UTF-8,反之亦然。
argv
可能会使用CP_ACP转换Unicode源字符串。