std::codecvt_byname
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <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
<tbody> </tbody> 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
<tbody> </tbody> 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 を含む文字エンコーディング間の変換を行います (クラステンプレート) |