멀티바이트 문자열 타입
멀티바이트 문자열 타입 (Multi-byte String types)
유니코드 문자열을 다뤄야 한다면 1바이트 문자열로는 부족해요. Free Pascal은 기본 문자가 최소 2바이트인 UnicodeString과 WideString 타입을 제공해서 UTF-16/UCS-2로 유니코드 문자를 저장할 수 있게 해줘요.
본문
멀티바이트 문자열 타입의 기본 문자는 크기가 최소 2바이트예요. 이는 UTF-16 또는 UCS-2 인코딩으로 유니코드 문자를 저장하는 데 사용할 수 있다는 뜻이에요.
UnicodeStrings
UnicodeString(유니코드 문자 문자열을 나타내는 데 사용)은 ansistring과 거의 같은 방식으로 구현돼요. 참조 카운트되고 null 종결되는 배열이지만, 일반 Char 대신 WideChar 배열로 구현된다는 점만 달라요. WideChar는 2바이트 문자예요(DBCS: Double Byte Character Set의 한 요소).
UnicodeString에는 AnsiString과 대부분 같은 규칙이 적용돼요. 컴파일러는 UnicodeString을 AnsiString으로, 그 반대로도 투명하게 변환해요.
AnsiString을 null 종결 문자 배열인 PChar로 타입캐스트하는 것과 유사하게, UnicodeString은 null 종결 문자 배열인 PUnicodeChar로 변환할 수 있어요. 주의할 점은 PUnicodeChar 배열이 1개가 아니라 2개의 null 바이트로 종결된다는 것이에요. 따라서 pchar로의 타입캐스트는 자동이 아니에요.
컴파일러 자체는 Unicode와 ansistring 사이의 어떤 변환도 지원하지 않아요. system 유닛에는 unicodestring manager 레코드가 있는데, 이것은 OS별 유니코드 처리 루틴으로 초기화할 수 있어요. 자세한 내용은 system 유닛 참조를 확인하세요.
유니코드 문자열 리터럴은 widechar와 비슷한 방식으로 만들 수 있어요.
Const
ws2: unicodestring = 'phi omega : '#$03A8' '#$03A9;
WideStrings
WideString 타입(COM 애플리케이션에서 유니코드 문자 문자열을 나타내는 데 사용)은 Windows에서 UnicodeString과 거의 같은 방식으로 구현돼요. 다른 플랫폼에서는 둘이 단순히 같은 타입이에요. COM과의 상호작용이 필요하지 않다면 UnicodeString 타입을 사용해야 해요.
Windows에서 WideString은 UnicodeString과 달리 참조 카운트되지 않아요. 그리고 OLE 자동화에 사용할 수 있게 하는 특수한 Windows 함수로 할당돼요. 이는 일반 Char 대신 WideChar의 null 종결 배열로 구현된다는 뜻이에요. WideString은 UnicodeString과 같은 규칙을 따르며, unicodestring과 유사하게 컴파일러가 WideString을 AnsiString으로(그 반대로도) 투명하게 변환해요.
타입캐스팅과 변환에는 UnicodeString 타입과 같은 규칙이 적용돼요.
Windows에서는 WideString 문자열이 특수한 Windows 함수로 할당되기 때문에 메모리 레이아웃이 UnicodeString과 다르다는 점에 주의하세요. 예를 들어 길이는 문자 수가 아니라 바이트 수로 저장돼요.
더 알아보기
- 1바이트 문자열 타입은 "Single-byte String types" 문서를 참고해요.
- 유니코드 문자 타입은 "WideChar" 문서에서 확인해요.
- unicodestring manager와 OS별 처리에 대한 상세 내용은 Free Pascal system unit 참조를 확인해요.