std:: codecvt_mode
|
헤더 파일에 정의됨
<codecvt>
|
||
|
enum
codecvt_mode
{
consume_header
=
4
,
|
(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 간 변환
(클래스 템플릿) |