std::codecvt_byname
提供: cppreference.com
ヘッダ <locale> で定義
|
||
template< class InternT, class ExternT, class State > class codecvt_byname : public std::codecvt<InternT, ExternT, State>; |
||
std::codecvt_byname は構築時に指定されたロケールのマルチバイト/ワイド文字変換ルールをカプセル化する std::codecvt ファセットです。
4つの特殊化が標準ライブラリによって提供されます。
ヘッダ
<locale> で定義 | |
std::codecvt_byname<char, char, std::mbstate_t> | 恒等変換 |
std::codecvt_byname<char16_t, char, std::mbstate_t> | UTF-16 と UTF-8 の間の変換 (C++11以上)(C++20で非推奨) |
std::codecvt_byname<char16_t, char8_t, std::mbstate_t> | UTF-16 と UTF-8 の間の変換 (C++20以上) |
std::codecvt_byname<char32_t, char, std::mbstate_t> | UTF-32 と UTF-8 の間の変換 (C++11以上)(C++20で非推奨) |
std::codecvt_byname<char32_t, char8_t, std::mbstate_t> | UTF-32 と UTF-8 の間の変換 (C++20以上) |
std::codecvt_byname<wchar_t, char, std::mbstate_t> | ワイド文字列とナロー文字集合の間のロケール固有の変換 |
目次 |
[編集] メンバ関数
コンストラクタ |
新しい codecvt_byname ファセットを構築します (パブリックメンバ関数) |
デストラクタ |
codecvt_byname ファセットを破棄します (プロテクテッドメンバ関数) |
std::codecvt_byname::codecvt_byname
explicit codecvt_byname( const char* name, std::size_t refs = 0 ); |
||
explicit codecvt_byname( const std::string& name, std::size_t refs = 0 ); |
(C++11以上) | |
名前 name
を持つロケールに対する新しい std::codecvt_byname
ファセットを構築します。
refs
はリソース管理のために使用されます。 refs == 0 の場合、処理系はそれを保持する最後の std::locale オブジェクトが破棄されたときにファセットを破棄します。 そうでなければ、オブジェクトは破棄されません。
引数
name | - | ロケールの名前 |
refs | - | ファセットにリンクする参照の数 |
std::codecvt_byname::~codecvt_byname
protected: ~codecvt_byname(); |
||
ファセットを破棄します。
std::codecvt から継承
メンバ型
メンバ型 | 定義 |
intern_type
|
internT
|
extern_type
|
externT
|
state_type
|
stateT
|
メンバオブジェクト
メンバ名 | 型 |
id (static)
|
std::locale::id |
メンバ関数
do_out を呼びます ( std::codecvt<InternT,ExternT,State> のパブリックメンバ関数)
| |
do_in を呼びます ( std::codecvt<InternT,ExternT,State> のパブリックメンバ関数)
| |
do_unshift を呼びます ( std::codecvt<InternT,ExternT,State> のパブリックメンバ関数)
| |
do_encoding を呼びます ( std::codecvt<InternT,ExternT,State> のパブリックメンバ関数)
| |
do_always_noconv を呼びます ( std::codecvt<InternT,ExternT,State> のパブリックメンバ関数)
| |
do_length を呼びます ( std::codecvt<InternT,ExternT,State> のパブリックメンバ関数)
| |
do_max_length を呼びます ( std::codecvt<InternT,ExternT,State> のパブリックメンバ関数)
|
プロテクテッドメンバ関数
[仮想] |
ファイルを書き込む時などのために、文字列を internT から externT に変換します ( std::codecvt<InternT,ExternT,State> の仮想プロテクテッドメンバ関数)
|
[仮想] |
ファイルから読み込む時などのために、文字列を externT から internT に変換します ( std::codecvt<InternT,ExternT,State> の仮想プロテクテッドメンバ関数)
|
[仮想] |
不完全な変換に対する externT 文字の終了文字シーケンスを生成します ( std::codecvt<InternT,ExternT,State> の仮想プロテクテッドメンバ関数)
|
[仮想] |
一定であれば、ひとつの internT 文字を生成するのに必要な externT の文字数を返します ( std::codecvt<InternT,ExternT,State> の仮想プロテクテッドメンバ関数)
|
[仮想] |
ファセットがすべての有効な引数の値に対して恒等変換をエンコードするかどうか調べます ( std::codecvt<InternT,ExternT,State> の仮想プロテクテッドメンバ関数)
|
[仮想] |
与えられた internT バッファへの変換によって消費されるであろう externT 文字列の長さを計算します ( std::codecvt<InternT,ExternT,State> の仮想プロテクテッドメンバ関数)
|
[仮想] |
単一の internT 文字に変換される可能性のある externT の最大文字数を返します ( std::codecvt<InternT,ExternT,State> の仮想プロテクテッドメンバ関数)
|
std::codecvt_base から継承
メンバ型 | 定義 |
enum result { ok, partial, error, noconv }; | スコープなし列挙型 |
列挙定数 | 定義 |
ok
|
変換はエラーなしで完了しました |
partial
|
変換元の文字は全部は変換されませんでした |
error
|
無効な文字に遭遇しました |
noconv
|
変換は必要ありません、入力と出力の型は同じです |
[編集] 例
この例は GB18030 対応ロケールの codecvt ファセットを用いた GB18030 エンコードされたファイルの読み込みをデモンストレーションします。
Run this code
#include <iostream> #include <fstream> #include <string> #include <locale> int main() { // GB18030 narrow multibyte encoding std::ofstream("text.txt") << "\x7a" // letter 'z', U+007a "\x81\x30\x89\x38" // letter 'ß', U+00df "\xcb\xae" // CJK ideogram '水' (water), U+6c34 "\x94\x32\xbc\x35"; // musical sign '𝄋' (segno), U+1d10b std::wifstream fin("text.txt"); fin.imbue(std::locale(fin.getloc(), new std::codecvt_byname<wchar_t, char, std::mbstate_t>("zh_CN.gb18030"))); for (wchar_t c; fin.get(c); ) std::cout << std::hex << std::showbase << c << '\n'; }
出力:
0x7a 0xdf 0x6c34 0x1d10b
[編集] 関連項目
UTF-8, UTF-16, UTF-32 を含む文字エンコーディング間の変換を行います (クラステンプレート) |