名稱空間
變體
操作

std::codecvt_mode

來自 cppreference.com
< cpp‎ | locale
 
 
 
 
定義於標頭檔案 <codecvt>
enum codecvt_mode {

    consume_header = 4,
    generate_header = 2,
    little_endian = 1

};
(C++11 起)
(C++17 中已棄用)
(C++26 中移除)

特化類 std::codecvt_utf8std::codecvt_utf16std::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 之間轉換
(類模板) [編輯]