std:: text_encoding
|
헤더에 정의됨
<text_encoding>
|
||
|
struct
text_encoding
;
|
(C++26부터) | |
text_encoding
클래스는 문자 인코딩을 식별하기 위한 메커니즘을 제공합니다. 이 클래스는 컴파일 시점에서의 번역 환경
일반 문자 리터럴 인코딩
과 런타임 시점에서의 실행 환경 문자 인코딩을 결정하는 데 사용됩니다.
각
text_encoding
객체는
문자 인코딩 방식
을 캡슐화하며,
text_encoding::id
의 열거자와 null로 종료되는 바이트 문자열로 표현되는 해당 이름으로 고유하게 식별됩니다. 이들은 각각
mib()
와
name()
멤버 함수를 통해 접근할 수 있습니다. 객체가 변환 또는 실행 환경에서 구현된 문자 인코딩 방식을 나타내는지 여부의 결정은 구현에 따라 정의됩니다.
text_encoding
클래스는
TriviallyCopyable
타입입니다. 문자 인코딩 방식에 해당하는 이름을 나타내는 배열 객체는
text_encoding
객체 자체 내에 중첩되어
있습니다. 저장된 이름은 널 문자
'
\0
'
를 제외하고 최대
max_name_length
개의 문자로 제한됩니다.
이 클래스는 등록된 문자 인코딩과 등록되지 않은 문자 인코딩을 모두 지원합니다. 등록된 인코딩은 다음 문자 인코딩을 제외한 IANA 문자 집합 레지스트리 에서 찾을 수 있는 것들입니다:
- NATS-DANO (33)
- NATS-DANO-ADD (34).
또한, 이 클래스는 등록된 문자 인코딩에 대해 다음과 같은 접근을 제공합니다:
- Primary name : 레지스트리에 지정된 공식 이름입니다.
- Aliases : 레지스트리의 별칭들을 구현 정의된 상위 집합입니다.
- MIBenum value : 코딩된 문자 인코딩을 식별하는 데 사용되는 고유 식별자입니다.
등록되지 않은 인코딩은 열거자 id :: other 또는 id :: unknown 와 사용자 정의 이름으로 표현할 수 있습니다.
MIBenum 값이
id
::
other
도 아니고
id
::
unknown
도 아닌
text_encoding
객체는 다음 불변 조건들을 유지합니다:
- * e. name ( ) ! = ' \0 ' 가 true 이고,
- e. mib ( ) == std:: text_encoding ( e. name ( ) ) . mib ( ) 가 true 인 경우.
목차 |
멤버 타입
|
문자 인코딩의 MIBenum 값을 나타냅니다
(public member enum) |
|
문자 인코딩의 별칭에 대한
view
입니다
(public member class) |
멤버 상수
| 이름 | 값 |
|
constexpr
std::
size_t
max_name_length
[static]
|
63
(public static member constant) |
데이터 멤버
| 멤버 | 설명 |
std
::
text_encoding
::
id
mib_
(private)
|
기본값으로
id
::
unknown
을 갖는 MIBenum 값
( 설명 전용 멤버 객체* ) |
char
[
max_name_length
+
1
]
name_
(private)
|
저장된 기본 이름
( 설명 전용 멤버 객체* ) |
멤버 함수
생성 |
|
새로운
text_encoding
객체를 생성
(public member function) |
|
|
[static]
|
일반 문자 리터럴 인코딩
을 나타내는 새로운
text_encoding
을 생성
(public static member function) |
|
[static]
|
실행 환경의 구현 정의 문자 인코딩 스킴을 나타내는 새로운
text_encoding
을 생성
(public static member function) |
관찰자 |
|
|
현재 문자 인코딩의 MIBenum 값을 반환
(public member function) |
|
|
현재 문자 인코딩의 기본 이름을 반환
(public member function) |
|
현재 문자 인코딩의 별칭들에 대한
view
를 반환
(public member function) |
|
|
[static]
|
지정된 MIB 값으로 실행 환경의 문자 인코딩 스킴을 확인
(public static member function) |
도우미 |
|
|
[static]
(private)
|
Charset Alias Matching
을 사용하여 두 별칭 이름을 비교
( 설명 전용 정적 멤버 함수* ) |
비멤버 함수
|
(C++26)
|
두 개의
text_encoding
객체를 비교합니다.
(public member function) |
헬퍼 클래스
|
(C++26)
|
std::text_encoding
에 대한 해시 지원
(클래스 템플릿 특수화) |
참고 사항
문자 인코딩 작업 시, 유니코드 기술 표준에 기술된 대로 Charset Alias Matching 을 사용하여 비교할 때 두 개의 서로 다른 등록된 문자 인코딩의 기본 이름이나 별칭이 동등하지 않다는 점에 유의하는 것이 중요합니다.
편의를 위해
text_encoding::id
의 열거자들은
text_encoding
의 멤버로 도입되어 직접 접근할 수 있습니다. 이는
text_encoding
::
ASCII
와
text_encoding
::
id
::
ASCII
가 동일한 개체를 참조함을 의미합니다.
구현 시 등록된 인코딩을 상호 교환 가능하지 않은 것으로 취급하는 것이 권장됩니다. 또한, 등록된 인코딩의 기본 이름은 명확한 선례가 없는 한, 유사하지만 다른 비등록 인코딩을 설명하는 데 사용되어서는 안 됩니다.
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_text_encoding
|
202306L
|
(C++26) |
std::text_encoding
|
예제
#include <locale> #include <print> #include <text_encoding> int main() { // 리터럴 인코딩은 컴파일 타임에 알려짐 constexpr std::text_encoding literal_encoding = std::text_encoding::literal(); // 리터럴 인코딩 확인 static_assert(literal_encoding.mib() != std::text_encoding::other && literal_encoding.mib() != std::text_encoding::unknown); // 환경 인코딩은 런타임에만 알려짐 std::text_encoding env_encoding = std::text_encoding::environment(); // 기본 로케일의 연관 인코딩 std::text_encoding locale_encoding = std::locale("").encoding(); std::println("The literal encoding is {}", literal_encoding.name()); std::println("The aliases of literal encoding:"); for (const char* alias_name : literal_encoding.aliases()) std::println(" -> {}", alias_name); if (env_encoding == locale_encoding) std::println("Both environment and locale encodings are the same"); std::println("The environment encoding is {}", env_encoding.name()); std::println("The aliases of environment encoding:"); for (const char* alias_name : env_encoding.aliases()) std::println(" -> {}", alias_name); }
가능한 출력:
The literal encoding is UTF-8 The aliases of literal encoding: -> UTF-8 -> csUTF8 Both environment and locale encodings are the same The environment encoding is ANSI_X3.4-1968 The aliases of environment encoding: -> US-ASCII -> iso-ir-6 -> ANSI_X3.4-1968 -> ANSI_X3.4-1986 -> ISO_646.irv:1991 -> ISO646-US -> us -> IBM367 -> cp367 -> csASCII -> ASCII
참고 항목
|
문화적 차이를 캡슐화하는 다형성 패싯들의 집합
(클래스) |