ワイド文字

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

ワイド文字(ワイドもじ)とは、主にC言語およびC++における文法要素で、1文字あたりのバイト数を通常より多くしたデータ型である。

目次

概要[編集]

C言語やC++の基本実行文字集合は通常、ASCIIのサブセットの文字種からなる(ただし実際の文字コードが何であるかは異なりうる)。

漢字のような拡張実行文字集合は、通常マルチバイト文字として扱われるが、1文字を構成するバイト数が可変長であり、本来1つの文字でありながら複数の文字の組(あるいは文字列)として扱わなければならないなどの不便がある。そうした問題を解消するために、1文字を1つの整数値で扱えるようにすることを目指したのがワイド文字である。

wchar_t型[編集]

ワイド文字はwchar_tというデータ型で表現する。char型を用いた文字・文字列に対応するように、ワイド文字定数は「L'c'」として表記する(通常の文字定数は「'c'」)。同様に、ワイド文字から構成される文字列をワイド文字列と呼び、そのリテラルは「L"str"」と表記する。

C言語でのwchar_tは単なるtypedef名(他の型の別名として定義されている)であるが、C++においては予約語である。コンパイラによっては、「wchar_t」を予約語とみなすか否かコンパイラの設定で切り替えられるものもある。

C99またはC++の場合、ワイド文字定数・文字列リテラルにはISO 10646文字集合の数値で表現するユニバーサル文字名を使用することもできる。

内部表現[編集]

CおよびC++の双方の標準規格において、少なくとも-127から+127までまたは0から255までの範囲を表現できる数値型、ということのみ定められている(少なくともchar型と同じ大きさが必要)。charがASCIIであるとは限らなかったり、floatやdoubleがIEEE 754の単精度・倍精度であるとは限らなかったりすることと同様に、wchar_tの内部表現もUnicodeである必要はない。本来はCode Set Independent(符号化集合に独立)なのである。

しかし、Windowsでは16ビット (UTF-16)、LinuxMac OS Xでは32ビット (UTF-32)であるため、その他の環境でもUnicodeを用いた符号化形式であると誤解されて、あるいは仮定してプログラムが作られることがある。そのようなプログラムは、Unicodeを用いた符号化形式とは限らない一般のUnixなどへの移植の際に問題が表面化する。なお、C99より、wchar_tがUnicodeと互換性のある場合、__STDC_ISO_10646__が事前定義されると定められている。

C++11/C11[編集]

2011年に改正されたC++とCの標準規格では、新たに2つの文字型が導入された。char16_tとchar32_tであり、それぞれUTF-16とUTF-32を内部表現とする。u'c'やU'c'あるいはu"str"やU"str"のように小文字のuと大文字のUを前置することで、それぞれchar16_tとchar32_tの文字定数・文字列リテラルを表現する。

D言語[編集]

D言語では、charと別に、次の2つの文字型が用意されている。

wchar
UTF-16を格納する16ビットの文字型
dchar
UTF-32を格納する32ビットの文字型