Juegos de caracteres y serialización

Nota:

Las instrucciones siguientes son para uso de [DllImport] y deben seguirse manualmente para obtener los resultados correctos. En su lugar, los usuarios de .NET 7+ deberían considerar el uso de [LibraryImport]. El analizador integrado de Roslyn (habilitado de forma predeterminada) proporcionará instrucciones necesarias para el atributo [LibraryImport] en el código.

La forma en que los valores char, y los objetos string y System.Text.StringBuilder se serializan depende del valor del campo CharSet en la estructura o P/Invoke. Puede establecer el elemento CharSet de P/Invoke estableciendo el campo DllImportAttribute.CharSet al declarar su P/Invoke. Con el fin de establecer el elemento CharSet para un tipo, establezca el campo StructLayoutAttribute.CharSet en la declaración de la estructura o la clase. Cuando no se establecen estos campos de atributo, es decisión del compilador de lenguaje determinar qué CharSet usar. C#, Visual Basic y F# usan el juego de caracteres None de forma predeterminada, el cual tiene el mismo comportamiento que el juego de caracteres Ansi.

Si System.Runtime.InteropServices.DefaultCharSetAttribute se aplica en el módulo en código de C# o Visual Basic, el compilador de C# o Visual Basic emitirá el CharSet que se proporciona de forma predeterminada en lugar de usar CharSet.None. F# no admite DefaultCharSetAttribute y siempre emite CharSet.None de forma predeterminada.

En la tabla siguiente se muestra una asignación entre cada juego de caracteres y cómo se representa un carácter o una cadena cuando se serializan con ese juego de caracteres:

Valor deCharSet Windows .NET Core 2.2 y versiones anteriores en Unix .NET Core 3.0 y versiones posteriores y Mono en Unix
Ansi char (la página de códigos de Windows [ANSI] predeterminada del sistema) char (UTF-8) char (UTF-8)
Unicode wchar_t (UTF-16) char16_t (UTF-16) char16_t (UTF-16)
Auto wchar_t (UTF-16) char16_t (UTF-16) char (UTF-8)

Asegúrese de que sabe qué representación espera su representación nativa cuando se selecciona el juego de caracteres.