(Translated by https://www.hiragana.jp/)
マルチバイト文字 - Wikipedia

マルチバイト文字もじ

1文字もじ複数ふくすうバイトであらわすことなど

マルチバイト文字もじ(マルチバイトもじ)とは、コンピュータうえ

  • 1文字もじ複数ふくすうバイトあらわ体系たいけい文字もじコード
  • 1文字もじのバイトすう可変かへんであるような体系たいけい
  • そのような体系たいけいあらわされる文字もじ

すが、文脈ぶんみゃくにより意味合いみあいがことなる。

文字もじ集合しゅうごうにおけるマルチバイト文字もじ 編集へんしゅう

ISO 2022体系たいけい前提ぜんていとした図形ずけい文字もじ集合しゅうごうにおいて、1文字もじが1バイト文字もじ集合しゅうごうえい: single-byte character set、94文字もじ集合しゅうごうまたは96文字もじ集合しゅうごう)にたいして、1文字もじが2バイト以上いじょう文字もじ集合しゅうごうを、マルチバイト文字もじ集合しゅうごうえい: multibyte character set)という。94×94文字もじ集合しゅうごう(2バイト)、96×96文字もじ集合しゅうごう(2バイト)、94×94×94文字もじ集合しゅうごう(3バイト)などがこれに該当がいとうするが、実際じっさいには94×94文字もじ集合しゅうごう以外いがいはまれである。

とくに、1文字もじが2バイトの文字もじ集合しゅうごうを2バイト文字もじ集合しゅうごうえい: double-byte character set)といい、以下いかのようなものがある。

なお、2バイト文字もじ集合しゅうごう文字もじのことを2バイト文字もじぶことがある。しかし、1バイト文字もじ集合しゅうごう文字もじであっても、EUC-JPにおけるJIS X 0201カタカナなどのように、符号ふごう方式ほうしきによっては一見いっけん1文字もじあたり2バイトであるかのような符号ふごうをされることがある。また近年きんねん[いつ?]では、Unicode処理しょりすることもおおい。そのため、文字もじ集合しゅうごうでなく個々ここ文字もじして1バイト文字もじ・2バイト文字もじ表現ひょうげんすることは、混乱こんらんまねくことがある。

符号ふごう方式ほうしきにおけるマルチバイト文字もじ 編集へんしゅう

シングルバイト文字もじとの対比たいひ 編集へんしゅう

符号ふごう方式ほうしきにおいて、1文字もじつねに1バイトとなる符号ふごう方式ほうしき[注釈ちゅうしゃく 1]たいして、1文字もじが2バイト以上いじょうになることのある符号ふごう方式ほうしき、およびそれによって符号ふごうされた文字もじれつ)のことを、マルチバイト文字もじれつ)という。

実際じっさいには、ほぼ例外れいがいなく ASCII あるいは ISO 646 をベースとし、バイト 80 - FF16しんほう(あるいはそのサブセット)ではじまるバイトれつによりそれ以外いがい文字もじ集合しゅうごう表現ひょうげんする。 1文字もじのバイトすう可変かへんのため、プログラムでの操作そうさ留意りゅういようする。

符号ふごう方式ほうしきであるから厳密げんみつには character set文字もじ集合しゅうごう) とぶのは不正ふせいかくだが、とくにIBMマイクロソフト用語ようごとして、single-byte character setたんバイト文字もじ集合しゅうごう)、double-byte character set(2バイト文字もじ集合しゅうごう)、multibyte character setバイト文字もじ集合しゅうごう)とぶことがおおい。

以下いかのようなものがある。

ワイド文字もじとの対比たいひ 編集へんしゅう

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-16UTF-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シンボルの定義ていぎ有無うむ[1]でマルチバイト文字もじセット/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関数かんすうは、コードページ番号ばんごう明示めいじてき指定していできず、動作どうさはシステムロケール設定せってい依存いぞんする。

Unicode 編集へんしゅう

近年きんねん[いつ?]符号ふごう文字もじ集合しゅうごうとしての ISO 10646Unicode)、およびその符号ふごう方式ほうしきUTF-8UTF-16など)がひろ使つかわれている。

文字もじ集合しゅうごうとしての ISO 10646 は、1バイト=1オクテット(8ビット)と定義ていぎすれば、一応いちおうマルチバイト文字もじ集合しゅうごうということはできる。しかし、現実げんじつてきには、1バイト文字もじ集合しゅうごうとマルチバイト文字もじ集合しゅうごうという分類ぶんるい前提ぜんていとなっているのは、「1バイト文字もじ集合しゅうごう(ASCII、ISO 646)を基本きほんとしつつマルチバイト文字もじ集合しゅうごう導入どうにゅうする」という命題めいだいであり、たん一文字ひともじ集合しゅうごうである Unicode を採用さいようする時点じてんでこの前提ぜんてい自体じたいくずれている。

符号ふごう方式ほうしきとしては、シングルバイトの符号ふごう方式ほうしき対比たいひした場合ばあい、UTF-8 などはマルチバイトの符号ふごう方式ほうしきといえる。UTF-16 などは ASCII 互換ごかんでないため考慮こうりょされないことがおおい。また、ワイド文字もじ文脈ぶんみゃくでは、一般いっぱんにワイド文字もじとしては UTF-16 や UTF-32 を使つかい、マルチバイト文字もじとしては、UTF-8 などを使つか場合ばあいと、従来じゅうらいの Shift_JIS などを使つか場合ばあいとがある。

脚注きゃくちゅう 編集へんしゅう

注釈ちゅうしゃく 編集へんしゅう

  1. ^ ISO 8859/1、Windowsコードページ1252、Macintosh Roman など

出典しゅってん 編集へんしゅう

  1. ^ Unicode Programming Summary” (英語えいご). Microsoft Docs. 2019ねん7がつ15にち閲覧えつらん

関連かんれん項目こうもく 編集へんしゅう