문자 집합 및 마샬링

char 값, string 개체 및 System.Text.StringBuilder 개체가 마샬링되는 방식은 P/Invoke 또는 구조체 중 하나의 CharSet 필드 값에 따라 다릅니다. P/Invoke를 선언할 때 DllImportAttribute.CharSet 필드를 설정하여 P/Invoke의 CharSet를 설정할 수 있습니다. 형식에 대해 CharSet을 설정하려면 클래스 또는 구조체 선언의 StructLayoutAttribute.CharSet 필드를 설정합니다. 이러한 특성 필드가 설정되지 않은 경우 사용할 CharSet는 언어 컴파일러에서 결정합니다. C#, Visual Basic 및 F#은 기본적으로 Ansi 문자 집합과 동일한 동작을 갖는 None 문자 집합을 사용합니다.

System.Runtime.InteropServices.DefaultCharSetAttribute가 C# 또는 Visual Basic 코드의 모듈에 적용된 경우 C# 또는 Visual Basic 컴파일러는 기본적으로 CharSet.None을 사용하는 대신 제공된 CharSet를 내보냅니다. F#은 DefaultCharSetAttribute를 지원하지 않으며 기본적으로 항상 CharSet.None을 내보냅니다.

다음 표에서는 각 문자 집합과 해당 문자 집합으로 마샬링할 때 문자 또는 문자열을 나타내는 방법 간의 매핑을 보여 줍니다.

CharSet Windows Unix에서 .NET Core 2.2 및 그 이전 Unix에서 .NET core 3.0 이상 및 Mono
Ansi char(시스템 기본 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)

문자 집합을 선택할 때 네이티브 표현에 필요한 표현을 알고 있어야 합니다.