Znakové sady a zařazování
Poznámka:
Následující doprovodné materiály jsou určené k [DllImport]
použití a je nutné je ručně dodržovat pro správné výsledky. Uživatelé .NET 7 a novější by měli zvážit použití [LibraryImport]
. Analyzátor Roslyn v boxu (ve výchozím nastavení povolený) poskytne požadované pokyny pro [LibraryImport]
atribut ve vašem kódu.
Způsob, jakým char
jsou hodnoty, string
objekty a System.Text.StringBuilder
objekty zařazovány, závisí na hodnotě CharSet
pole na P/Invoke nebo struktuře. P/Invoke můžete nastavit CharSet
nastavením DllImportAttribute.CharSet pole při deklarování P/Invoke. Chcete-li nastavit typ, nastavte CharSet
StructLayoutAttribute.CharSet pole v deklaraci třídy nebo struktury. Pokud tato pole atributů nejsou nastavena, je na kompilátoru jazyka, který určí, který CharSet
použít. Jazyk C#, Visual Basic a F# ve výchozím nastavení používají None znakovou sadu, která má stejné chování jako Ansi znaková sada.
Pokud je použit System.Runtime.InteropServices.DefaultCharSetAttribute v modulu v kódu jazyka C# nebo Visual Basic, kompilátor jazyka C# nebo Visual Basic vygeneruje ve výchozím nastavení poskytnuté CharSet
místo použití CharSet.None
. Jazyk F# nepodporuje a DefaultCharSetAttribute
ve výchozím nastavení vždy generuje CharSet.None
.
Následující tabulka ukazuje mapování mezi jednotlivými znakovými sadami a způsob, jakým je znak nebo řetězec reprezentován při zařazování pomocí této znakové sady:
CharSet Hodnotu |
Windows | .NET Core 2.2 a starší v unixu | .NET Core 3.0 a novější a Mono v unixu |
---|---|---|---|
Ansi |
char (výchozí nastavení systémuZnaková stránka systému Windows (ANSI) |
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) |
Při výběru znakové sady se ujistěte, že víte, jakou reprezentaci vaše nativní reprezentace očekává.