ワイド文字との対比
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/04 15:18 UTC 版)
「マルチバイト文字」の記事における「ワイド文字との対比」の解説
C言語の規格において、char型以上のサイズを持つwchar_t型を利用したワイド文字(列)に対して、char型を利用して1文字あたり1バイト以上の可変長のバイト列として表したものをマルチバイト文字(列)という。ワイド文字に対する用語のため、1文字をもっぱら1バイトで表すシングルバイト文字であっても、この意味ではマルチバイト文字に含まれる。 ワイド文字を内部処理に用いるプラットフォームもある。ワイド文字のサイズが2バイトあるいは4バイトの場合、本来1文字ごとに1バイトで収まるはずのASCII範囲の文字にも2バイトあるいは4バイトを費やすことになり、少なくともASCII範囲に関してはメモリ効率は劣ることになるが、処理対象のデータ中にマルチバイト文字で表現すると2バイト以上を費やすような文字が多数出現する場合は、ワイド文字を利用したほうが処理効率もメモリ効率も高くなることがある。 ワイド文字およびマルチバイト文字の具体的な表現は環境依存であり規格には定めがない。これらは、実在する具体的な文字集合や符号化方式を分類する用語ではなく、固定長か可変長かという概念を定義した用語である。そのため、何がワイド文字で何がマルチバイト文字かという考え方ではなく、ワイド文字の表現として何を使い、マルチバイト文字の表現として何を使うか、という考え方をとる。ワイド文字としては、近年[いつ?]では Unicode が使われることが多い。マルチバイト文字の符号化方式はロケールに依存するが、ほとんどの場合は ASCII あるいは ISO 646 をベースにしたものとなり、日本語ロケールであれば一般的に Shift_JIS や EUC-JP になる。UTF-8 が用いられる場合もある。 ワイド文字は当初、文字集合におけるすべての文字を等しいサイズのデータで一様に処理できるようにすることを想定していた。しかし、Unicodeにおいてサロゲートペア、結合文字、異体字セレクタといった拡張概念が採用されたことにより、UTF-16やUTF-32といった符号化方式のデータをワイド文字に格納する場合、たとえワイド文字が16ビットあるいは32ビットのサイズを持っていたとしても、1つのワイド文字だけでは表現できないUnicode文字も現れるようになった。文字境界の判定や文字数のカウントなど、プログラム上での扱いはマルチバイト文字と同様に注意を要する。 C言語(C95以降)では、マルチバイト文字(列)の操作のために以下のような関数が規定されている。ただし、特に日本語のような2バイト文字集合を含むロケールでは、実装が不十分で実用に耐えない場合も多い。 mblen mbtowc wctomb mbstowcs wcstombs Microsoft Windowsでは、ワイド文字が2バイト(16ビット)として定義されており、符号化方式にUTF-16を利用する。多くのWindows APIには、入出力インターフェイスとして、システムロケール設定に依存するマルチバイト文字セットを利用する関数・構造体(シンボル末尾にAが付けられている)と、Unicode文字セットを利用する関数・構造体(シンボル末尾にWが付けられている)の両方が用意されており、ヘッダーファイルをインクルードする際に_UNICODEシンボルの定義有無でマルチバイト文字セット/Unicode文字セットを切り替えることのできるプリプロセッサマクロも用意されているが、マルチバイト文字セット用のAPIはWindows 9x系向けに書かれたコードとの互換性のために残されているものであり、またWindows NT系では内部処理にUTF-16を使用しているため、マルチバイト文字セット用のAPIを使用すると変換のための余計なオーバーヘッドが増える。Microsoft Visual C++はバージョン7.1 (2003) まではマルチバイト文字セットが既定値だったが、バージョン8.0 (2005) 以降はUnicode文字セットが既定値となった。マルチバイト文字列の操作や、ワイド文字列との相互変換のために以下のようなAPI関数が提供されている。 MultiByteToWideChar WideCharToMultiByte CharNextA CharPrevA シンボル末尾にAが付けられたマルチバイト文字セット用API関数は、コードページ番号を明示的に指定できず、動作はシステムロケール設定に依存する。
※この「ワイド文字との対比」の解説は、「マルチバイト文字」の解説の一部です。
「ワイド文字との対比」を含む「マルチバイト文字」の記事については、「マルチバイト文字」の概要を参照ください。
- ワイド文字との対比のページへのリンク