Null-terminated multibyte strings
ヌル終端マルチバイト文字列(NTMBS)、または「マルチバイト文字列」は、ゼロ以外のバイトのシーケンスの後に値がゼロのバイト(終端のヌル文字)が続くものです。
文字列に格納される各文字は1バイト以上を占有する可能性があります。マルチバイト文字列で文字を表現するために使用されるエンコーディングはロケール固有です:UTF-8、GB18030、EUC-JP、Shift-JSなどがあります。例えば、char配列 { ' \xe4 ' , ' \xbd ' , ' \xa0 ' , ' \xe5 ' , ' \xa5 ' , ' \xbd ' , ' \0 ' } はUTF-8マルチバイトエンコーディングで文字列 "你好" を保持するNTMBSです:最初の3バイトが文字「你」をエンコードし、次の3バイトが文字「好」をエンコードします。同じ文字列をGB18030でエンコードするとchar配列 { ' \xc4 ' , ' \xe3 ' , ' \xba ' , ' \xc3 ' , ' \0 ' } となり、2つの文字それぞれが2バイトシーケンスとしてエンコードされます。
一部のマルチバイトエンコーディングでは、与えられたマルチバイト文字シーケンスが「シフトシーケンス」として知られる前のバイトシーケンスに応じて異なる文字を表現する場合があります。このようなエンコーディングは状態依存と呼ばれます:各文字を解釈するには現在のシフト状態の知識が必要です。NTMBSが有効であるためには、初期シフト状態で開始および終了する必要があります:シフトシーケンスが使用された場合、対応するアンシフトシーケンスが終端ナル文字の前に存在しなければなりません。このようなエンコーディングの例としては、7ビットJIS、BOCU-1、および SCSU があります。
マルチバイト文字列は、ヌル終端バイト文字列(NTBS)とレイアウト互換性があり、文字数の計算を除き、同じ機能を使用して格納、コピー、検査が可能です。正しいロケールが有効な場合、I/O関数もマルチバイト文字列を処理します。マルチバイト文字列は、 std::codecvt のメンバー関数、 std::wstring_convert 、または以下のロケール依存変換関数を使用してワイド文字列との相互変換が可能です:
目次 |
関数
マルチバイト/ワイド文字変換 |
|
|
ヘッダーで定義
<cstdlib>
|
|
|
次のマルチバイト文字のバイト数を返す
(関数) |
|
|
次のマルチバイト文字をワイド文字に変換する
(関数) |
|
|
ワイド文字をマルチバイト表現に変換する
(関数) |
|
|
ナローマルチバイト文字列をワイド文字列に変換する
(関数) |
|
|
ワイド文字列をナローマルチバイト文字列に変換する
(関数) |
|
|
ヘッダーで定義
<cwchar>
|
|
|
状態を指定して次のマルチバイト文字のバイト数を返す
(関数) |
|
|
std::mbstate_t
オブジェクトが初期シフト状態を表すかどうかをチェックする
(関数) |
|
|
可能であれば、シングルバイトナロー文字をワイド文字に拡張する
(関数) |
|
|
可能であれば、ワイド文字をシングルバイトナロー文字に縮小する
(関数) |
|
|
状態を指定して次のマルチバイト文字をワイド文字に変換する
(関数) |
|
|
状態を指定してワイド文字をマルチバイト表現に変換する
(関数) |
|
|
状態を指定してナローマルチバイト文字列をワイド文字列に変換する
(関数) |
|
|
状態を指定してワイド文字列をナローマルチバイト文字列に変換する
(関数) |
|
|
ヘッダーで定義
<cuchar>
|
|
|
(C++20)
|
ナローマルチバイト文字をUTF-8エンコーディングに変換する
(関数) |
|
(C++20)
|
UTF-8文字列をナローマルチバイトエンコーディングに変換する
(関数) |
|
(C++11)
|
ナローマルチバイト文字をUTF-16エンコーディングに変換する
(関数) |
|
(C++11)
|
UTF-16文字をナローマルチバイトエンコーディングに変換する
(関数) |
|
(C++11)
|
ナローマルチバイト文字をUTF-32エンコーディングに変換する
(関数) |
|
(C++11)
|
UTF-32文字をナローマルチバイトエンコーディングに変換する
(関数) |
型
|
定義済みヘッダー
<cwchar>
|
|
|
マルチバイト文字列を反復処理するために必要な変換状態情報
(クラス) |
|
マクロ
|
ヘッダーで定義
<climits>
|
|
|
MB_LEN_MAX
|
マルチバイト文字の最大バイト数
(マクロ定数) |
|
ヘッダーで定義
<cstdlib>
|
|
|
MB_CUR_MAX
|
現在のCロケールにおけるマルチバイト文字の最大バイト数
(マクロ変数) |
|
ヘッダーで定義
<cuchar>
|
|
|
__STDC_UTF_16__
(C++11)
|
mbrtoc16およびc16rtombでUTF-16エンコーディングが使用されることを示す
(マクロ定数) |
|
__STDC_UTF_32__
(C++11)
|
mbrtoc32およびc32rtombでUTF-32エンコーディングが使用されることを示す
(マクロ定数) |
関連項目
|
C documentation
for
Null-terminated multibyte strings
|