Namespaces
Variants

std:: text_encoding

From cppreference.net
헤더에 정의됨 <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).

또한, 이 클래스는 등록된 문자 인코딩에 대해 다음과 같은 접근을 제공합니다:

  1. Primary name : 레지스트리에 지정된 공식 이름입니다.
  2. Aliases : 레지스트리의 별칭들을 구현 정의된 상위 집합입니다.
  3. 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)
지정된 MIB 값으로 실행 환경의 문자 인코딩 스킴을 확인
(public static member function)
도우미
[static] (private)
Charset Alias Matching 을 사용하여 두 별칭 이름을 비교
( 설명 전용 정적 멤버 함수* )

비멤버 함수

두 개의 text_encoding 객체를 비교합니다.
(public member function)

헬퍼 클래스

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

참고 항목

문화적 차이를 캡슐화하는 다형성 패싯들의 집합
(클래스)