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
型のオプション値を受け入れ、これは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間の変換
(クラステンプレート) |