字符集和封送 Charsets and marshalling

本文内容

char 值、string 对象和 System.Text.StringBuilder 对象的封送方式取决于 P/Invoke 或结构上的 CharSet 字段的值。可以通过在声明 P/Invoke 时设置 DllImportAttribute.CharSet 字段来设置 P/Invoke 的 CharSet若要设置结构的 CharSet,请在声明结构时设置 StructLayoutAttribute.CharSet 字段。未设置这些属性字段时,将由语言编译器确定使用哪些 CharSet默认情况下,C# 使用 Ansi 字符集。

下表显示了每个字符集之间的映射以及字符或字符串在使用该字符集封送时的表示形式:

CharSetWindowsUnix在 Unix 上为 Mono
Ansichar (ANSI)char(在 macOS 上为 ANSI,在 Linux 上为 UTF-8)char (UTF-8)
Unicodewchar_t (UTF-16)char16_t (UTF-16)char16_t (UTF-16)
自动wchar_t (UTF-16)char16_t (UTF-16)char (UTF-8)

确保了解选择字符集时所需的本机表示形式。