Zeichensätze und Marshalling
Die Art und Weise, wie char
-Werte, string
-Objekte und System.Text.StringBuilder
-Objekte gemarshallt werden, hängt vom Wert im Feld CharSet
in P/Invoke oder der Struktur ab. Sie können den CharSet
von P/Invoke festlegen, indem Sie beim Deklarieren von P/Invoke das Feld DllImportAttribute.CharSet bestimmen. Um den CharSet
für einen Typ festzulegen, bestimmen Sie das Feld StructLayoutAttribute.CharSet in Ihrer Klassen- oder Strukturdeklaration. Wenn diese Attributfelder nicht festgelegt sind, bestimmt der Sprachcompiler, welcher CharSet
verwendet wird. C#, Visual Basic und F# verwenden standardmäßig den None-Zeichensatz, der dasselbe Verhalten wie der Ansi-Zeichensatz aufweist.
Wenn System.Runtime.InteropServices.DefaultCharSetAttribute auf das Modul in C#- oder Visual Basic-Code angewendet wird, gibt der C#- oder Visual Basic-Compiler standardmäßig das bereitgestellte CharSet
aus, anstatt CharSet.None
zu verwenden. F# unterstützt das DefaultCharSetAttribute
nicht und gibt standardmäßig CharSet.None
aus.
Die folgende Tabelle zeigt eine Zuordnung zwischen den einzelnen Zeichensätzen und wie ein Zeichen oder eine Zeichenkette dargestellt wird, wenn sie mit diesem Zeichensatz gemarshallt wird:
CharSet -Wert |
Windows | .NET Core 2.2 und früher unter Unix | .NET Core 3.0 und höher und Mono unter Unix |
---|---|---|---|
Ansi |
char (die standardmäßige Windows-ANSI-Codepage des Systems) |
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) |
Stellen Sie sicher, dass Sie wissen, welche Darstellung Ihre native Darstellung erwartet, wenn Sie Ihren Zeichensatz auswählen.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für