名前空間
変種
操作

「cpp/string/multibyte」の版間の差分

提供: cppreference.com
< cpp‎ | string
(Use {{lc}}. Update links. Various fixes.)
1行: 1行:
{{tr_note}}
+
{{title|}}
{{title|Null-terminated multibyte strings}}
+
 
{{cpp/string/multibyte/navbar}}
 
{{cpp/string/multibyte/navbar}}
  
{{tr|NULLで終わるマルチバイト文字列(NTMBS)、または "マルチバイト文字列"とは、値ゼロを持つバイト(終端のNULL文字)が続くゼロ以外のバイトのシーケンスです.|A null-terminated multibyte string (NTMBS), or "multibyte string", is a sequence of nonzero bytes followed by a byte with value zero (the terminating null character).}}
+
null-terminated multibyte stringNTMBS) ()
  
{{tr|文字列に格納された各文字は1バイト以上を占有することができる。マルチバイト文字列内の文字を表すために使用されるエンコードはロケール固有である:それは例えば、UTF-8、GB18030、EUC-JP、シフトJIS、等であるかもしれない、char配列{{c|{'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'}}}は文字列を保持NTMBSです{{c|"你好"}} UTF-8マルチバイトエンコーディングで:最初の3バイトは、文字你をエンコードすると、次の3バイトには文字好をエンコードします。 GB18030でエンコードされたものと同じ文字列は2文字の各々は2バイトシーケンスとしてエンコードされるchar配列{{c|{'\xc4', '\xe3', '\xba', '\xc3', '\0'}}}、です.|Each character stored in the string may occupy more than one byte. The encoding used to represent characters in a multibyte character string is locale-specific: it may be UTF-8, GB18030, EUC-JP, Shift-JIS, etc. For example, the char array {{c|{'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'}}} is an NTMBS holding the string {{c|"你好"}} in UTF-8 multibyte encoding: the first three bytes encode the character 你, the next three bytes encode the character 好. The same string encoded in GB18030 is the char array {{c|{'\xc4', '\xe3', '\xba', '\xc3', '\0'}}}, where each of the two characters is encoded as a two-byte sequence.}}
+
UTF-8 GB18030, EUC-JP, Shift-JIS {{c|{'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'}}} {{c|"你好"}} GB18030 {{c|{'\xc4', '\xe3', '\xba', '\xc3', '\0'}}}
  
{{tr|一部のマルチバイトエンコーディングでは、任意のマルチバイト文字シーケンスは、 "shift配列"として知られている前のバイト·シーケンスに応じて異なる文字を表すことがあります。このようなエンコーディングが状態依存として知られています:現在のシフト状態の知識は、各文字を解釈するために必要です。それは初期シフト状態で開始および終了する場合NT​​MBSにのみ有効です。シフトシーケンスが使用された場合、対応したunshift配列は終端のヌル文字の前に存在する必要があります。このようなエンコーディングの例としては、7ビットJIS、BOCU-1とSCSUです.|In some multibyte encodings, any given multibyte character sequence may represent different characters depending on the previous byte sequences, known as "shift sequences". Such encodings are known as state-dependent: knowledge of the current shift state is required to interpret each character. An NTMBS is only valid if it begins and ends in the initial shift state: if a shift sequence was used, the corresponding unshift sequence has to be present before the terminating null character. Examples of such encodings are the 7-bit JIS, BOCU-1 and SCSU.}}
+
-:..SCSU
  
{{tr|マルチバイト文字列はNULL終端バイト文字列(NTBS)とのレイアウト互換性があり、保存されてコピーされ、文字の数を計算する場合を除き、同じ機能を使用して調べることができます。正しいロケールが有効になっている場合、I / O機能にもマルチバイト文字列を扱う。マルチバイト文字列は{{lc|std::codecvt}}のメンバ関数、{{lc|std::wstring_convert}}、または次のロケール依存の変換関数を使用してワイド文字列との間で変換することができます|A multibyte character string is layout-compatible with null-terminated byte string (NTBS), that is, can be stored, copied, and examined using the same facilities, except for calculating the number of characters. If the correct locale is in effect, I/O functions also handle multibyte strings. Multibyte strings can be converted to and from wide strings using the {{lc|std::codecvt}} member functions, {{lc|std::wstring_convert}}, or the following locale-dependent conversion functions:}}
+
/stringbyte(NTBS) {{lc|std::codecvt}}, {{lc|std::wstring_convert}}
  
===マルチバイト/ワイド文字変換===
+
======
 
{{dsc begin}}
 
{{dsc begin}}
 
{{dsc header | cstdlib}}
 
{{dsc header | cstdlib}}
35行: 34行:
 
{{dsc end}}
 
{{dsc end}}
  
===タイプ===
+
======
 
{{dsc begin}}
 
{{dsc begin}}
 
{{dsc header | cwchar}}
 
{{dsc header | cwchar}}
48行: 47行:
 
{{dsc inc | cpp/string/multibyte/dsc MB_CUR_MAX}}
 
{{dsc inc | cpp/string/multibyte/dsc MB_CUR_MAX}}
 
{{dsc header | cuchar}}
 
{{dsc header | cuchar}}
{{dsc macro const | __STDC_UTF_16__ |  nolink=true |{{tr| そのUTF-16のエンコーディングがmbrtoc16とc16rtombによって使用されていることを示します| indicates that UTF-16 encoding is used by mbrtoc16 and c16rtomb}}}}
+
{{dsc macro const | __STDC_UTF_16__ |  nolink=true | UTF-16 }}
{{dsc macro const | __STDC_UTF_32__ |  nolink=true |{{tr| そのUTF-32のエ​​ンコーディングがmbrtoc32とc32rtombによって使用されていることを示します| indicates that UTF-32 encoding is used by mbrtoc32 and c32rtomb}}}}
+
{{dsc macro const | __STDC_UTF_32__ |  nolink=true | UTF-32 }}
 +
 +
 
 +
 +
 +
}}
 
{{dsc end}}
 
{{dsc end}}
  

2018年3月3日 (土) 05:05時点における版

NULL終端マルチバイト文字列 (null-terminated multibyte string; NTMBS) または「マルチバイト文字列」は、非ゼロのバイト列に値ゼロのバイト (終端のNULL文字) が続いたものです。

文字列に格納されている各文字は2つ以上のバイトを使う場合があります。 マルチバイト文字列の文字を表すために使われるエンコーディングはロケール固有です。 UTF-8 であったり、 GB18030, EUC-JP, Shift-JIS などであったりします。 例えば、文字の配列 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} は UTF-8 エンコーディングでは "你好" を保持するNTMBSです (最初の3つのバイトが文字「你」を符号化し、次の3つのバイトが文字「好」を符号化します)。 同じ文字列が GB18030 では {'\xc4', '\xe3', '\xba', '\xc3', '\0'} になります (各文字が2バイトで符号化されます)。

一部のマルチバイトエンコーディングでは、あるマルチバイト文字シーケンスが、以前に現れた「シフトシーケンス」と呼ばれるバイトシーケンスに依存して、異なる文字を表現する場合があります。 このようなエンコーディングは状態依存と呼ばれ、各文字を解釈するためには現在のシフト状態を知る必要があります。 NTMBSは初期シフト状態で始まり初期シフト状態で終わる場合に限り有効です。 シフトシーケンスが現れた場合は、終端のNULL文字の前に、対応する脱シフトシーケンスが現れる必要があります。 このようなエンコーディングの例としては7ビット JIS、BOCU-1 や SCSU があります。

マルチバイト文字列はNULL終端バイト文字列 (NTBS) とレイアウト互換です。 つまり、同じ設備を使用して格納したり、コピーしたり、検査することができます。 ただし、文字数の計算は除きます。 現在のロケールが有効であれば、入出力関数はマルチバイト文字列も取り扱えます。 std::codecvt, std::wstring_convert または以下のロケール依存変換関数を使ってマルチバイト文字列をワイド文字列に変換したり、ワイド文字列をマルチバイト文字列に変換したりできます。

目次

マルチバイト文字列とワイド文字列の変換

ヘッダ <cstdlib> で定義
次のマルチバイト文字のバイト数を返します
(関数) [edit]
次のマルチバイト文字をワイド文字に変換します
(関数) [edit]
ワイド文字をマルチバイト表現に変換します
(関数) [edit]
マルチバイト文字列をワイド文字列に変換します
(関数) [edit]
ワイド文字列をマルチバイト文字列に変換します
(関数) [edit]
ヘッダ <cwchar> で定義
mbstate_t オブジェクトが初期シフト状態を表しているかどうかチェックします
(関数) [edit]
可能であればシングルバイト文字をワイド文字に変換します
(関数) [edit]
可能であればワイド文字をシングルバイト文字に変換します
(関数) [edit]
指定された状態を使用して次のマルチバイト文字のバイト数を返します
(関数) [edit]
指定された状態を使用して次のマルチバイト文字をワイド文字に変換します
(関数) [edit]
指定された状態を使用してワイド文字をマルチバイト表現に変換します
(関数) [edit]
指定された状態を使用してマルチバイト文字列をワイド文字列に変換します
(関数) [edit]
指定された状態を使用してワイド文字列をマルチバイト文字列に変換します
(関数) [edit]
ヘッダ <cuchar> で定義
(C++11)
ナローマルチバイト文字を UTF-16 エンコーディングに変換します
(関数) [edit]
(C++11)
16ビットワイド文字をマルチバイト文字列に変換します
(関数) [edit]
(C++11)
ナローマルチバイト文字を UTF-32 エンコーディングに変換します
(関数) [edit]
(C++11)
32ビットワイド文字をマルチバイト文字列に変換します
(関数) [edit]

ヘッダ <cwchar> で定義
マルチバイト文字列を反復処理するために必要な変換状態情報
(クラス) [edit]

マクロ

ヘッダ <climits> で定義
MB_LEN_MAX
マルチバイト文字1文字の最大バイト数
(マクロ定数) [edit]
ヘッダ <cstdlib> で定義
MB_CUR_MAX
現在のCのロケールにおけるマルチバイト文字1文字の最大文字数
(macro variable) [edit]
ヘッダ <cuchar> で定義
__STDC_UTF_16__
mbrtoc16 と c16rtomb で UTF-16 エンコーディングが使用されることを表します
(マクロ定数)
__STDC_UTF_32__
mbrtoc32 と c32rtomb で UTF-32 エンコーディングが使用されることを表します
(マクロ定数)

参考文献

NULL終端マルチバイト文字列C言語リファレンス