Namespaces
Variants

std:: codecvt_mode

From cppreference.net
헤더 파일에 정의됨 <codecvt>
enum codecvt_mode {

consume_header = 4 ,
generate_header = 2 ,
little_endian = 1

} ;
(C++11부터)
(C++17에서 사용 중단됨)
(C++26에서 제거됨)

페이셋 std::codecvt_utf8 , std::codecvt_utf16 , 그리고 std::codecvt_utf8_utf16 은 템플릿 인자로 std::codecvt_mode 타입의 선택적 값을 허용하며, 이는 유니코드 문자열 변환의 선택적 기능들을 지정합니다.

상수

헤더 파일 정의 <locale>
열거자 의미
little_endian 입력이 리틀 엔디안 바이트 순서라고 가정함 (UTF-16 입력에만 적용되며, 기본값은 빅 엔디안입니다)
consume_header 입력 시퀀스 시작 부분에 바이트 순서 표시가 있으면 이를 소비하고, (UTF-16의 경우) 해당 바이트 순서를 따라 나머지 입력을 디코딩함
generate_header 출력 시퀀스 시작 부분에 바이트 순서 표시를 출력함

인식되는 바이트 순서 표시는 다음과 같습니다:

0xfe 0xff UTF-16 빅 엔디안
0xff 0xfe UTF-16 리틀 엔디안
0xef 0xbb 0xbf UTF-8 (엔디안에 영향 없음)

만약 std::consume_header 를 선택하지 않고 바이트 순서 표식으로 시작하는 파일을 읽는 경우, 유니코드 문자 U+FEFF(제로 너비 비분리 공백)가 문자열 내용의 첫 번째 문자로 읽혀집니다.

예제

다음 예제는 UTF-8 BOM을 소비하는 방법을 보여줍니다:

#include <codecvt>
#include <cwchar>
#include <fstream>
#include <iostream>
#include <locale>
#include <string>
int main()
{
    // UTF-8 data with BOM
    std::ofstream{"text.txt"} << "\ufeffz\u6c34\U0001d10b";
    // read the UTF-8 file, skipping the BOM
    std::wifstream fin{"text.txt"};
    fin.imbue(std::locale(fin.getloc(),
                          new std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>));
    for (wchar_t c; fin.get(c);)
        std::cout << std::hex << std::showbase << (std::wint_t)c << '\n';
}

출력:

0x7a
0x6c34
0x1d10b

참고 항목

문자 인코딩 간 변환 (UTF-8, UTF-16, UTF-32 포함)
(클래스 템플릿)
(C++11) (C++17에서 사용 중단됨) (C++26에서 제거됨)
UTF-8과 UCS-2/UCS-4 간 변환
(클래스 템플릿)
(C++11) (C++17에서 사용 중단됨) (C++26에서 제거됨)
UTF-16과 UCS-2/UCS-4 간 변환
(클래스 템플릿)
(C++11) (C++17에서 사용 중단됨) (C++26에서 제거됨)
UTF-8과 UTF-16 간 변환
(클래스 템플릿)