命令行参数的编码 C#

Encoding of command line arguments C#


我在 WPF 应用程序中有一个字符串,我使用 Process.StartInfo.Arguments 属性 作为命令行参数传递给本机应用程序。我知道 C# 以 UTF-16 编码存储字符串。而且我也知道本机应用程序对编码没有任何作用,并期望它是默认值,在我的国家/地区是 windows-1251。所以我们在 C# 应用程序中使用 UTF-16,在原生应用程序中使用 1251。这实际上以某种方式起作用。


问题是转换发生在何处以及它的可靠性如何。有没有办法强制进程 class 对命令行参数使用特定编码?

在 Unicode 操作系统(即 Windows 的任何现代版本)上,Process.Start 方法调用 Win32 CreateProcessW 函数,该函数也使用 UTF-16 表示形式命令行参数。

字符转换(如果需要)由操作系统在启动进程时执行。如果本机应用程序的入口点接受 Unicode 命令行,则不需要转换,否则 OS 会将其转换为 ANSI 字符串。我不相信你作为调用者有能力控制这里使用哪个代码页。