ヌル終端マルチバイト文字列
ヌル終端マルチバイト文字列 (NTMBS) 、または「マルチバイト文字列」は、ゼロでないバイトのシーケンスに続いて値がゼロのバイト (終端ヌル文字) が続くものです。
文字列に格納される各文字は、1バイト以上を占める場合があります。マルチバイト文字列で文字を表現するために使用されるエンコーディングはロケール固有です。UTF-8、GB18030、EUC-JP、Shift-JISなどがあります。たとえば、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 オブジェクトが初期シフト状態を表しているか確認する (関数) | |
| 可能であれば、1バイトのナロー文字をワイド文字にワイド化する (関数) | |
| 可能であれば、ワイド文字を1バイトのナロー文字にナロー化する (関数) | |
| 与えられた状態で、次のマルチバイト文字をワイド文字に変換する (関数) | |
| 与えられた状態で、ワイド文字をそのマルチバイト表現に変換する (関数) | |
| 与えられた状態で、ナローマルチバイト文字列をワイド文字列に変換する (関数) | |
| 与えられた状態で、ワイド文字列をナローマルチバイト文字列に変換する (関数) | |
| ヘッダー
<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言語ドキュメント
|