Null-terminated multibyte strings
ヌル終端マルチバイト文字列(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は、初期シフト状態で開始および終了する場合にのみ有効です:シフトシーケンスが使用された場合、対応するアンシフトシーケンスが終端ナル文字の前に存在しなければなりません。このようなエンコーディングの例としてBOCU-1と SCSU があります。
マルチバイト文字列は null終端バイト文字列 (NTBS) とレイアウト互換性があり、文字数の計算を除き、同じ機能を使用して格納、コピー、検査が可能です。正しいロケールが有効な場合、I/O関数もマルチバイト文字列を処理します。マルチバイト文字列は、以下のロケール依存変換関数を使用してワイド文字列との相互変換が可能です:
目次 |
関数
マルチバイト/ワイド文字変換 |
|
|
ヘッダーで定義
<stdlib.h>
|
|
|
次のマルチバイト文字のバイト数を返す
(関数) |
|
|
次のマルチバイト文字をワイド文字に変換する
(関数) |
|
|
(C11)
|
ワイド文字をマルチバイト表現に変換する
(関数) |
|
(C11)
|
ナローマルチバイト文字列をワイド文字列に変換する
(関数) |
|
(C11)
|
ワイド文字列をナローマルチバイト文字列に変換する
(関数) |
|
ヘッダーで定義
<wchar.h>
|
|
|
(C95)
|
mbstate_tオブジェクトが初期シフト状態を表しているかチェックする
(関数) |
|
(C95)
|
可能であれば、シングルバイトのナロー文字をワイド文字に拡張する
(関数) |
|
(C95)
|
ワイド文字を可能であれば単一バイトのナロー文字に変換する
(関数) |
|
(C95)
|
次のマルチバイト文字のバイト数を状態を指定して返す
(関数) |
|
(C95)
|
状態を指定して次のマルチバイト文字をワイド文字に変換する
(関数) |
|
(C95)
(C11)
|
ワイド文字をマルチバイト表現に変換する(状態を指定)
(関数) |
|
(C95)
(C11)
|
ナローマルチバイト文字列をワイド文字列に変換する(状態を指定)
(関数) |
|
(C95)
(C11)
|
ワイド文字列をナローマルチバイト文字列に変換する(状態指定)
(関数) |
|
ヘッダーで定義
<uchar.h>
|
|
|
(C23)
|
ナローマルチバイト文字をUTF-8エンコーディングに変換する
(関数) |
|
(C23)
|
UTF-8文字列をナローマルチバイトエンコーディングに変換する
(関数) |
|
(C11)
|
ナローマルチバイト文字をUTF-16エンコーディングに変換する
(関数) |
|
(C11)
|
UTF-16文字をナローマルチバイトエンコーディングに変換する
(関数) |
|
(C11)
|
ナローマルチバイト文字をUTF-32エンコーディングに変換する
(関数) |
|
(C11)
|
UTF-32文字をナローマルチバイトエンコーディングに変換する
(関数) |
型
|
ヘッダーで定義
<uchar.h>
|
|
|
ヘッダーで定義
<wchar.h>
|
|
|
(C95)
|
マルチバイト文字列を反復処理するために必要な変換状態情報
(クラス) |
|
ヘッダーで定義
<uchar.h>
|
|
|
(C23)
|
8ビット文字型
(typedef) |
|
(C11)
|
16ビット文字型
(typedef) |
|
(C11)
|
32ビット文字型
(typedef) |
マクロ
|
ヘッダで定義
<limits.h>
|
|
|
MB_LEN_MAX
|
任意のサポートされているロケールにおけるマルチバイト文字の最大バイト数
(マクロ定数) |
|
ヘッダで定義
<stdlib.h>
|
|
|
MB_CUR_MAX
|
現在のロケールにおけるマルチバイト文字の最大バイト数
(マクロ変数) |
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 7.10 整数型のサイズ <limits.h> (p: TBD)
-
- 7.22 一般ユーティリティ <stdlib.h> (p: TBD)
-
- 7.28 Unicodeユーティリティ <uchar.h> (p: TBD)
-
- 7.29 拡張マルチバイトおよびワイド文字ユーティリティ <wchar.h> (p: TBD)
-
- 7.31.12 一般ユーティリティ <stdlib.h> (p: TBD)
-
- 7.31.16 拡張マルチバイトおよびワイド文字ユーティリティ <wchar.h> (p: TBD)
-
- K.3.6 一般ユーティリティ <stdlib.h> (p: TBD)
-
- K.3.9 拡張マルチバイトおよびワイド文字ユーティリティ <wchar.h> (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.10 整数型のサイズ <limits.h> (p: TBD)
-
- 7.22 一般ユーティリティ <stdlib.h> (p: TBD)
-
- 7.28 Unicodeユーティリティ <uchar.h> (p: TBD)
-
- 7.29 拡張マルチバイトおよびワイド文字ユーティリティ <wchar.h> (p: TBD)
-
- 7.31.12 一般ユーティリティ <stdlib.h> (p: TBD)
-
- 7.31.16 拡張マルチバイトおよびワイド文字ユーティリティ <wchar.h> (p: TBD)
-
- K.3.6 一般ユーティリティ <stdlib.h> (p: TBD)
-
- K.3.9 拡張マルチバイトおよびワイド文字ユーティリティ <wchar.h> (p: TBD)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.10 整数型のサイズ <limits.h> (p: 222)
-
- 7.22 一般ユーティリティ <stdlib.h> (p: 340-360)
-
- 7.28 Unicodeユーティリティ <uchar.h> (p: 398-401)
-
- 7.29 拡張マルチバイト文字およびワイド文字ユーティリティ <wchar.h> (p: 402-446)
-
- 7.31.12 一般ユーティリティ <stdlib.h> (p: 456)
-
- 7.31.16 拡張マルチバイト文字およびワイド文字ユーティリティ <wchar.h> (p: 456)
-
- K.3.6 一般ユーティリティ <stdlib.h> (p: 604-614)
-
- K.3.9 拡張マルチバイト文字およびワイド文字ユーティリティ <wchar.h> (p: 627-651)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.10 整数型のサイズ <limits.h> (p: 203)
-
- 7.20 一般ユーティリティ <stdlib.h> (p: 306-324)
-
- 7.24 拡張マルチバイト文字およびワイド文字ユーティリティ <wchar.h> (p: 348-392)
-
- 7.26.10 一般ユーティリティ <stdlib.h> (p: 402)
-
- 7.26.12 拡張マルチバイト文字およびワイド文字ユーティリティ <wchar.h> (p: 402)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.1.4 制限 <float.h> および <limits.h>
-
- 4.10 一般ユーティリティ <stdlib.h>
-
- 4.13.7 一般ユーティリティ <stdlib.h>
関連項目
|
C++ documentation
for
Null-terminated multibyte strings
|
|
C++ documentation
の
Null-terminated multibyte strings
|