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.