std:: text_encoding
|
ヘッダーで定義
<text_encoding>
|
||
|
struct
text_encoding
;
|
(C++26以降) | |
text_encoding
クラスは、文字エンコーディングを識別するための仕組みを提供します。これは、コンパイル時に翻訳環境の
通常文字リテラルエンコーディング
を、また実行時に実行環境の文字エンコーディングを決定するために使用されます。
各
text_encoding
オブジェクトは
文字エンコーディング方式
をカプセル化しており、
text_encoding::id
の列挙子と、対応するヌル終端バイト文字列で表現される名前によって一意に識別されます。これらはそれぞれ
mib()
および
name()
メンバー関数を通じてアクセスできます。オブジェクトが翻訳環境または実行環境で実装された文字エンコーディング方式を表現するかどうかの判定は実装定義です。
text_encoding
クラスは
TriviallyCopyable
型です。文字エンコーディング方式に対応する名前を表す配列オブジェクトは、
text_encoding
オブジェクト自体に内包されています
。格納される名前は、ナル文字
'
\0
'
を除いて最大
max_name_length
文字に制限されています。
このクラスは登録済みおよび未登録の文字エンコーディングの両方をサポートします。登録済みエンコーディングとは、 IANA文字セットレジストリ で確認できるもののうち、以下の文字エンコーディングを除いたものを指します:
- NATS-DANO (33)
- NATS-DANO-ADD (34)
さらに、このクラスは登録された文字エンコーディングに対して以下の機能へのアクセスを提供します:
- プライマリ名 : レジストリで指定された公式名称。
- エイリアス : レジストリからのエイリアスの実装定義による上位集合。
- MIBenum値 : 符号化文字エンコーディングを識別するための一意の識別子。
登録されていないエンコーディングは、列挙子 id :: other または id :: unknown とカスタム名で表現できます。
MIBenum値が
id
::
other
でも
id
::
unknown
でもない
text_encoding
オブジェクト
e
は、以下の不変条件を維持します:
- * e. name ( ) ! = ' \0 ' が true であり、かつ
- e. mib ( ) == std:: text_encoding ( e. name ( ) ) . mib ( ) が true である。
目次 |
メンバー型
|
文字エンコーディングのMIBenum値を表す
(公開メンバ列挙型) |
|
文字エンコーディングのエイリアスに対する
view
ビュー
(公開メンバクラス) |
メンバー定数
| 名前 | 値 |
|
constexpr
std::
size_t
max_name_length
[static]
|
63
(public static member constant) |
データメンバ
| メンバー | 説明 |
std
::
text_encoding
::
id
mib_
(private)
|
デフォルト値として
id
::
unknown
を持つMIBenum値
( 説明専用メンバーオブジェクト* ) |
char
[
max_name_length
+
1
]
name_
(private)
|
格納されたプライマリ名
( 説明専用メンバーオブジェクト* ) |
メンバー関数
Creation |
|
新しい
text_encoding
オブジェクトを構築する
(public member function) |
|
|
[static]
|
通常の文字リテラルエンコーディング
を表す新しい
text_encoding
を構築する
(public static member function) |
|
[static]
|
実行環境の実装定義の文字エンコーディングスキームを表す新しい
text_encoding
を構築する
(public static member function) |
Observers |
|
|
現在の文字エンコーディングのMIBenum値を返す
(public member function) |
|
|
現在の文字エンコーディングのプライマリ名を返す
(public member function) |
|
現在の文字エンコーディングのエイリアスの
view
を返す
(public member function) |
|
|
[static]
|
指定されたMIB値で実行環境の文字エンコーディングスキームをチェックする
(public static member function) |
Helpers |
|
|
[static]
(private)
|
Charset Alias Matching
を使用して2つのエイリアス名を比較する
( exposition-only static member function* ) |
非メンバー関数
|
(C++26)
|
2つの
text_encoding
オブジェクトを比較する。
(public member function) |
ヘルパークラス
|
(C++26)
|
std::text_encoding
のハッシュサポート
(クラステンプレートの特殊化) |
注記
文字エンコーディングを扱う際に重要な点として、Unicode技術標準で規定されている Charset Alias Matching を使用して比較した場合、2つの異なる登録済み文字エンコーディングの主要名またはエイリアスは等価ではありません。
利便性のため、
text_encoding::id
の列挙子は
text_encoding
のメンバーとして導入されており、直接アクセスできます。これは、
text_encoding
::
ASCII
と
text_encoding
::
id
::
ASCII
が同じエンティティを参照することを意味します。
実装では、登録されたエンコーディングを互換性のないものとして扱うことが推奨されます。 さらに、登録されたエンコーディングの主要名は、明確な前例がない限り、類似しているが異なる非登録エンコーディングを記述するために使用すべきではありません。
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_text_encoding
|
202306L
|
(C++26) |
std::text_encoding
|
例
#include <locale> #include <print> #include <text_encoding> int main() { // リテラルエンコーディングはコンパイル時に既知 constexpr std::text_encoding literal_encoding = std::text_encoding::literal(); // リテラルエンコーディングのチェック static_assert(literal_encoding.mib() != std::text_encoding::other && literal_encoding.mib() != std::text_encoding::unknown); // 環境エンコーディングは実行時にのみ既知 std::text_encoding env_encoding = std::text_encoding::environment(); // デフォルトロケールの関連エンコーディング std::text_encoding locale_encoding = std::locale("").encoding(); std::println("The literal encoding is {}", literal_encoding.name()); std::println("The aliases of literal encoding:"); for (const char* alias_name : literal_encoding.aliases()) std::println(" -> {}", alias_name); if (env_encoding == locale_encoding) std::println("Both environment and locale encodings are the same"); std::println("The environment encoding is {}", env_encoding.name()); std::println("The aliases of environment encoding:"); for (const char* alias_name : env_encoding.aliases()) std::println(" -> {}", alias_name); }
出力例:
The literal encoding is UTF-8 The aliases of literal encoding: -> UTF-8 -> csUTF8 Both environment and locale encodings are the same The environment encoding is ANSI_X3.4-1968 The aliases of environment encoding: -> US-ASCII -> iso-ir-6 -> ANSI_X3.4-1968 -> ANSI_X3.4-1986 -> ISO_646.irv:1991 -> ISO646-US -> us -> IBM367 -> cp367 -> csASCII -> ASCII
関連項目
|
文化的差異をカプセル化する多相的なファセットの集合
(クラス) |