std::codecvt_mode
來自 cppreference.com
定義於標頭檔案 <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
型別值作為模板引數,它指定 Unicode 字串轉換的可選特性。
[編輯] 常量
定義於標頭檔案
<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
,則 Unicode 字元 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 之間轉換 (類模板) |