Windows在cmd.exe窗口中启动的程序所使用的命令行参数编码是什么?
命令行参数的编码似乎不受使用“chcp”设置的控制台代码页的影响(我将其设置为UTF-8,代码页65001,并使用Lucida Console字体。)
如果我从一个UTF-8文件中复制并粘贴一个十六进制编码为E28093的EN DASH到命令行中,它将在cmd.exe窗口中正确地显示。然而,当它被传递给程序时,它似乎被转换为十六进制96(一种ANSI表示)。如果我将Cyrillic字符粘贴到命令行中,它们也会正确显示,但在程序中会显示为问号(十六进制3F)。
如果我复制一个命令行并将其粘贴到文本文件中,生成的文件是UTF-8;它包含与源文件相同的EN DASH和Cyrillic字符的编码。
看起来,粘贴到cmd.exe窗口中的字符是使用使用“chcp”选择的代码页捕获和显示的,但在将它们作为参数传递给程序之前,某些ANSI代码页用于将字符转换为不同的编码。无法转换的字符显然会被静默转换为问号。
因此,如果我想在程序中正确处理命令行参数,我需要确切地知道参数的编码。例如,如果我想将命令行参数与从文件中读取的已知UTF-8数据进行比较,我需要将参数从正确的编码转换为UTF-8。谢谢。
命令行参数的编码似乎不受使用“chcp”设置的控制台代码页的影响(我将其设置为UTF-8,代码页65001,并使用Lucida Console字体。)
如果我从一个UTF-8文件中复制并粘贴一个十六进制编码为E28093的EN DASH到命令行中,它将在cmd.exe窗口中正确地显示。然而,当它被传递给程序时,它似乎被转换为十六进制96(一种ANSI表示)。如果我将Cyrillic字符粘贴到命令行中,它们也会正确显示,但在程序中会显示为问号(十六进制3F)。
如果我复制一个命令行并将其粘贴到文本文件中,生成的文件是UTF-8;它包含与源文件相同的EN DASH和Cyrillic字符的编码。
看起来,粘贴到cmd.exe窗口中的字符是使用使用“chcp”选择的代码页捕获和显示的,但在将它们作为参数传递给程序之前,某些ANSI代码页用于将字符转换为不同的编码。无法转换的字符显然会被静默转换为问号。
因此,如果我想在程序中正确处理命令行参数,我需要确切地知道参数的编码。例如,如果我想将命令行参数与从文件中读取的已知UTF-8数据进行比较,我需要将参数从正确的编码转换为UTF-8。谢谢。