Sdílet prostřednictvím


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 CharSetStructLayoutAttribute.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 DefaultCharSetAttributeve 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á.