Windows 使用什么编码来传递给在 cmd.exe 窗口中启动的程序的命令行参数?
命令行参数的编码似乎不受使用的控制台代码页设置的影响chcp(我将其设置为UTF-8,代码页65001并使用Lucida控制台字体。)
如果我将 UTF-8 文件中编码为十六进制 E28093 的 EN DASH 粘贴到命令行中,它会在 cmd.exe 窗口中正确显示。但是,当它传递给程序时,它似乎被转换为十六进制 96(ANSI 表示形式)。如果我将西里尔字符粘贴到命令行中,它们也会正确显示,但在程序中显示为问号(十六进制 3F。)
如果我复制命令行并将其粘贴到文本文件中,则生成的文件是 UTF-8;它包含与源文件相同的 EN DASH 和西里尔字符编码。
看起来粘贴到 cmd.exe 窗口中的字符是使用通过 选择的代码页捕获和显示的chcp,但在将字符作为参数传递给程序之前,使用了一些 ANSI 代码页将字符转换为不同的编码。显然无法转换的字符会默默地转换为问号。
因此,如果我想正确处理程序中的命令行参数,我需要确切地知道参数的编码是什么。例如,如果我希望将命令行参数与从文件读取的已知 UTF-8 数据进行比较,我需要将参数从正确的编码转换为 UTF-8。谢谢。
宽字符和 win32::api 中提供的答案适用于将utf-16传递给 Win API。但是如何转换Win API返回的utf16 字符串?(我正在尝试使用GetCommandLineW)。
我已经尝试了这两种方法Unicode::String,Encode::decode但都没有成功。我猜也许数据需要先打包或解包,但是如何呢?
之后,下一个问题是如何处理像CommandLineToArgvW.
谢谢你的帮助。