文字コード

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

文字コード(もじコード)はコンピュータ上で文字キャラクタ (コンピュータ))を利用するために各文字に割り当てられるバイト表現。もしくは、バイト表現と文字の対応関係(文字コード体系)のことを指して「文字コード」と呼ぶことも多い。本記事では主に後者について記述する。

概説[編集]

文字コードとは、コンピュータなどの電子媒体において、文章を画像などの図形データとして扱わずに、テキストの形式で扱う場合に、その各文字(単一の文字でない場合もある)に対して持っているコードのことである。

文字を特定の符号で扱う手段はコンピュータが誕生するよりも昔から存在した(モールス符号などもそのようにして使用された文字を符号化した情報の一種である)。また、文字を表形式にして扱う方法も古くから存在し(日本語仮名五十音図もその一種である)、利用されてきた。コンピュータにおいては、文字などを表形式などを用いて体系的に符号化した利用がその性質上強く行われ、それらが文字コードとなっている。

文字コードの歴史は電気通信の歴史とほぼ等しい。古くはテレックスで用いられた国際電信アルファベット第2、アメリカ規格協会 (ASA) が定めた ASCIIIBM によって開発された EBCDIC 等があった。しかしコンピュータシステムが多くの言語圏で利用されるようになるにつれて文字コードの種類も増大し、現在では100種類以上の代表的な文字コードが存在する。

コンピュータの発展が早かった英語圏やその他のアルファベットを使用する言語(主に西洋)、日本語中国語韓国語などは早くから言語固有の文字コードが制定され利用可能になった。その他の大部分の言語もUnicodeの普及とともにコンピュータ上で文字を正常に表現することができるようになりつつある。

多様な文字コードの存在は文字コードの互換性問題をひきおこす。文字コードの互換性問題とは、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題である。日本語では、これは特殊な漢字(苗字や団体名に使われる漢字)などが入ったデータベースを扱うときなどに問題となる。また文字コードの変換にかかるコストはばかにならないことが多い。

近年、これらの互換性問題を解決するためにすべての言語の文字コードを1つの文字コードで対応する試みである Unicode が作られ、オペレーティングシステムJava などの内部コードとして広く利用されている。Microsoft WindowsMac OS X などの最近の OS は、表面上は Unicode 以外の文字コードを使っていても内部処理上は Unicode に変換して処理しているものが多い。この場合、字によっては、Unicode と各文字コードの変換テーブルが OS によって異なるなどの問題が生じる場合がある。

(符号化)文字集合、(文字)符号化方式[編集]

文字コードに関して、(符号化)文字集合(CCS[1])と(文字)符号化方式(CES[2])という区別がなされることがある。

文字コードには、文字集合は等しいが符号化方式だけが異なる文字コードと、そもそも対象としている文字集合そのものが異なる文字コードがある。たとえば、日本語には JIS X 0208 というひとつの文字集合に対して ISO-2022-JP (JIS コード等と呼ばれることが多い)、EUC-JPShift_JIS など複数の符号化方式が存在する。Unicode にも単一の文字集合に対して UTF-8UTF-16Punycode などの異なる符号化方式が存在する。また、それぞれ異なる文字集合を同じ符号化方式とする関係もあり、例えば符号化方式 EUC に対して EUC-JPEUC-KRGB2312 (EUC-CN) などがある。通常、文字コードといえば符号化方式をさすこともあれば、文字集合と結合させた概念(キャラクタセット符号化表現あるいは文字マップ)として語られることもある。これには、ISO/IEC 8859Big5 のように、文字集合と符号化方式が事実上一体化している体系が少なからず存在することも影響している。

もっとも、「符号化文字集合」や「文字符号化方式」といった用語は標準化団体によっても定義が異なるため、「これは符号化文字集合だ、いや文字符号化方式だ」といった議論は意味をなさないことがある。元来、文字コードは文字の集合の各文字に一意なバイト表現を割り当てただけのシンプルなものだったが、バイト値を計算によって変形した符号化表現が用いられるようになってきたため(例えば Shift_JISUTF-8)、「符号化文字集合」と「文字符号化方式」とを区別するようになったと考えられる。両者の区分は Unicode や IETF では用いられる。一方、ISO/IECJIS では「文字符号化方式」を「符号化文字集合の構造」あるいは「文字符号の構造及び拡張法」として規定している。

コードセット[編集]

Unicodeでは、単一のUnicode文字集合と、どれかひとつのエンコーディングを使用するため必要のない概念であるが、たとえばEUC-JPを例にとると、「ASCII」「JIS X 0208を(符号化としての)EUCで符号化したもの」「その他」を一緒にして使うもの、が「EUC-JP」である。このような、あるテキストにおいて使われる文字コードの1個乃至複数個の規約のセット、とでもいうようなものを指してコードセットと言う。この語はたとえば、ソフトウェアの実装において、任意の文字集合・符号化が扱えるよう実装すること(たとえばruby 1.9のStringオブジェクト)を指してコードセット独立(CodeSet Independent, CSI)といったように使われる[3]

コードセットに相当する概念には、以下で述べるように様々な用語が使われている。

MIME[編集]

MIME ではキャラクタセット英語: charset または character set)という概念が用いられる。言葉通りには「文字集合」であるが、実際に意味しているものはコードセットに近い。

この「キャラクタセット」は「オクテットの並びを文字の並びに変換する方式」等と定義されている[4]。MIME で実現する電子メールメッセージなどの処理を主眼に置いた概念である。ネットワーク上の符号化表現をなんらかの文字の集合に写像するための変換方式が互いに異なれば、それらは互いに異なる「キャラクタセット」である。言い換えると、文字符号化方式と符号化文字集合とをまとめたものが、ここにおける「キャラクタセット」である。このため、一般に「キャラクタセット」では、符号化表現と文字とが一対一に対応するとは限らない。

インターネット上で用いることのできる「キャラクタセット」の登録と公開は IANA が行っている(「外部リンク」参照)。

日本工業規格 (JIS) では、このMIMEでの「キャラクタセット」を追認する形で、いくつかの「キャラクタセット」を符号化表現として規格化している。また、MIMEより後に制定されたXMLにおいては、文字符号化の宣言としてcharsetではなくencodingという用語を用いている。

Unicode[編集]

Unicodeでは文字マップ (英語: Character Map; CM) という。Unicodeの文字マップは抽象文字レパートリに含まれる文字の組合わせから直列化バイト列への写像として定義されている。一つのCCSCEF及びCESを暗黙に含む単純文字マップは、概念上の文字から符号単位さらにバイトへの写像である。複合的なCESを含む複合文字マップには、一つ以上のCCSとCEFが含まれる。この場合の、文字マップの抽象文字レパートリは、関連する符号化文字集合で扱われるレパートリの和集合である。

文字マップは、IBMの文字データ表現体系 (CDRA) においてはコード化文字セット識別コード (英語: coded character set identifier; CCSID) によって識別される。文字マップはcharsetやキャラクタセットの他に、(広義の)コード・ページ (英語: code page)、CHARMAPPOSIX国際化機能の文字集合記述ファイル)などと呼ばれることもある。

Unicodeでは多くの場合、UTF-16BEのように、文字マップと文字符号化方式の両方に同じ名称が使用される。たいていはそのような使用法が文脈によって明確なときに単純文字マップについて行われる。

外字[編集]

外字とは表外字(規格表の外の文字)の略であり、ユーザがデザインして用いるユーザ定義文字や、メーカーなどが定義した環境依存文字(いわゆる機種依存文字)もしくはベンダ拡張漢字のことを指す。

外字というユーザが独自に文字を登録できる領域がある文字コードは複数存在する。Unicode においては 6,400 + 131,072 文字の「PUA (Private Use Area = 私的領域)」があり、Windows-31J (Microsoft Windows Codepage 932) にも1,880文字の外字領域がある。ユーザが独自にフォントを登録した文字(ユーザ定義文字)は、文書の交換時に特別に同意しない限りは他の環境で読むことができないので、互換性の上で重大な問題を引き起こす事がある。ベンダ拡張文字の場合は、ユーザが表外字でないことを認識せずに利用してしまう事があるため、より重大な問題を引き起こす(例として挙げれば、Windows環境(CP932)のローマ数字がMac環境では化けて表示されるなど)。

JIS規格においては、JIS X 0208で定義された文字集合に対してEUC-JPまたはShift_JISによる符号化を行う際、1~94区に対応しない領域(EUC-JPやShift_JISでは94区に94点を掛けた8836を超える文字が定義可能であるため)や、1~94区の範囲内であっても文字が定義されていない箇所(JIS X 0208には、そのような空き領域が複数存在している)に外字を入れる実装が存在した。1997年改正(JIS X 0208:1997) ではShift_JIS符号化およびEUC-JP符号化も規格で規定することにより、空き領域を外字として使用することが原則禁止された。またJIS X 0213:2000では、主要なベンダ外字の文字を規格に入れて94区までの空き領域をなくしたことで、94区までの区間内の外字を扱える箇所をなくし、2面を使用した実装水準4を選択する場合にはShift_JIS-2004符号化の場合、94区外の領域も埋まるため、外字を入れることが可能な領域がなくなった。しかしながら、データ交換のうえで不自由があってもなお外字を利用したいとする需要も一部には根強くある(専門分野に使用する文字など、「市場性」は無いがその分野では必須となる文字は存在する)ことから、この改正に批判的な人もいる[要出典]

文字コードの一覧(一部)[編集]

1バイト系文字コード(符号化文字集合)[編集]

1バイト系文字コードは、俗に「半角文字」と呼ばれることもある。

2バイト系符号化文字集合[編集]

2バイト系文字コードは、俗に「全角文字」と呼ばれることもある。

文字符号化方式と文字コード(キャラクタセット)[編集]

大規模文字集合[編集]

ISO/IEC 10646およびUnicode[編集]

  • Unicode
  • ISO/IEC 10646 (UCS、JIS X 0221) ※ISO/IEC 10646-1とISO/IEC 10646-2はISO/IEC 10646:2003で統合された。同様にJIS X 0221-1はJIS X 0221:2007で改訂された。

Unicode の文字符号化方式[編集]

印刷業界の文字集合[編集]

印刷業界においては、公的な文字コード規格では包摂されている異体字グリフの相違を厳密に区別したいというニーズが強く存在する。 そのため、そのようなニーズに応える文字集合が企業ベースで策定されている。 一般的な情報交換に用いられることはない。

  • Adobe-Japan1 文字コレクション
    • Adobe-Japan1-0
    • Adobe-Japan1-1 (JIS X 0208-1990、MacJapanese 対応)
    • Adobe-Japan1-2 (IBM 拡張文字に対応)
    • Adobe-Japan1-3 (OpenType Standard)
    • Adobe-Japan1-4 (OpenType Pro)
    • Adobe-Japan1-5 (JIS X 0213 にほぼ対応)
    • Adobe-Japan1-6 (JIS X 0212 対応)
  • Adobe-Japan2 文字コレクション
    • Adobe-Japan2-0 (Adobe-Japan1-6 に統合され廃止)
  • Adobe-GB1 文字コレクション
    • Adobe-GB1-0
    • Adobe-GB1-1
    • Adobe-GB1-2
    • Adobe-GB1-3
    • Adobe-GB1-4
    • Adobe-GB1-5
  • Adobe-CNS1 文字コレクション
    • Adobe-CNS1-0
    • Adobe-CNS1-1
    • Adobe-CNS1-2
    • Adobe-CNS1-3
    • Adobe-CNS1-4
    • Adobe-CNS1-5
    • Adobe-CNS1-6
  • Adobe-Korea1 文字コレクション
    • Adobe-Korea1-0
    • Adobe-Korea1-1
    • Adobe-Korea1-2
  • 電算写植
    • SKコード (SK72, SK78, 外字A, 外字B, 外字C)
      写研が開発した文字コード。独自の文字セットを持つ。文字セットの大部分は既にAdobe-Japanに収録されている。
    • PMTコード
      印刷機械貿易が開発した文字コード
  • 新聞業界
  • 電子書籍
    • BBeB 標準文字セット
      ユニコードをベースにソニーが拡張
    • 新潮文庫の100冊の外字
    • 青空文庫外字

ベンダごとの文字コード[編集]

以下は、主にメインフレームオフコンなどのプロプライエタリレガシーコンピュータやレガシーなシステム、特殊な環境において利用される文字コードを含む。レガシーなものとの連携を目的とする場合を除き、パソコンで利用されることがないものが多い。

  • マイクロソフト
    • cp932
      マイクロソフト版Shift_JIS
    • cp10001
      マイクロソフト版MacJapanese
    • cp20290
      マイクロソフト版IBM CCSID 00290
    • cp20932
      マイクロソフト版日本語EUC
    • cp21027
      マイクロソフト版IBM CCSID 01027
    • cp50220
      マイクロソフト版ISO-2022-JPの一つ
    • cp50221
      マイクロソフト版ISO-2022-JPの一つ
    • cp50222
      マイクロソフト版ISO-2022-JPの一つ
    • cp51932
      Windows-31JをEUC-JPで表したもの
  • サン・マイクロシステムズ
    • cp942C
      cp942の拡張
    • cp943C
      cp943の拡張
  • アップル
  • 富士通
    • JEF 〈ジェフ〉
      メインフレーム(M シリーズ、GS シリーズ)で利用される。JIS C 6226-1978 を GR(Graphic Right) に展開し、その上方エリアに「JEF 拡張漢字」というベンダ選定拡張漢字を配置。
    • EUC-U90
      DS/90 系 UNIX サーバで利用される。JIS X 0208-1990 を GR に展開し、「JEF 拡張漢字」をシングルシフトの GR 展開で表現。
  • NEC
    • JIPS(J) 〈ジップスジェー〉
      ACOS-6メインフレームで利用される。JIS C 6226-1978 の9区〜13区に特殊文字を登録し、GR 領域に「G1 集合」というベンダ選定拡張漢字を登録したコード。
    • JIPS(E) 〈ジップスイー〉
      ACOS-2ACOS-4メインフレームで利用される。JIPS(J) の上下1バイトをそれぞれ EBCDIC に変換して得られるコード。
    • NEC内部コード(E)
      ITOSA-VX 系のオフコンで利用される。JIPS(J) の上1バイトをシフトさせたものに対して上下1バイトをそれぞれ EBCDIC に変換して得られるコード。
  • 日立
    • KEIS(78) 〈ケイスナナハチ〉
      メインフレーム(M シリーズ、AP シリーズ)で利用される。JIS C 6226-1978 を GR に展開し、その上方エリアに「拡張文字セット3」というベンダ選定拡張漢字を配置。
    • KEIS(83) 〈ケイスハチサン〉
      メインフレーム(M シリーズ、AP シリーズ)で利用される。JIS X 0208-1983 を GR に展開し、その上方エリアに「拡張文字セット3」というベンダ選定拡張漢字を配置。
    • KEIS(90) 〈ケイスキュウマル〉
    • EUC-HJ
  • 日本IBM
    • IBM漢字 (DBCS-Host)
      メインフレームシステム/360 系)、AS/400オフコン(現行製品では IBM i搭載のPowerSystem)で利用される。JIS C 6226-1978 以前に制定されたため、完全に独自の漢字表を使用。漢字部分については、Windows-31J の第一・第二水準漢字及び IBM 拡張文字との間で一対一の対応がある。
    • CCSID 290
    • CCSID 897
    • CCSID 930
    • CCSID 932
    • CCSID 939
    • CCSID 942
    • CCSID 943
    • CCSID 1027
    • CCSID 1399
    • CCSID 2962
    • CCSID 5026
    • CCSID 5035
    • cp930
      メインフレームで利用される。
    • cp932
      IBM OS/2で利用される。マイクロソフトのcp932との同一性は未確認。
    • cp939
      メインフレームで利用される。
    • cp942
      IBM OS/2で利用される。
    • cp943
      IBM OS/2で利用される。
  • 日本ユニシス
  • 三菱電機
    • JSII 〈ジェイエスツー〉(「MELCOM 漢字」とも呼ばれる)
      三菱電機のメインフレームで利用される。JIS X 0208-1983 を GR に展開し、その上方エリアにベンダ選定拡張漢字を配置。
  • DEC
  • WZ Software
    • SJIS-EX
  • アドビシステムズ
    • UniJIS-UCS2-H
    • UniJIS-UCS2-V
    • UniJIS-UCS2-HW-H
    • UniJIS-UCS2-HW-V
    • UniJIS-UTF16-H
    • UniJIS-UTF16-V
    • 90ms-RKSJ-H
      アドビシステムズ版cp932 横書き用
    • 90ms-RKSJ-V
      アドビシステムズ版cp932 縦書き用
    • 90msp-RKSJ-H
      アドビシステムズ版cp932 半角英字プロポーショナル版横書き用
    • 90msp-RKSJ-V
      アドビシステムズ版cp932 半角英字プロポーショナル版縦書き用
    • 83pv-RKSJ-H
      アドビシステムズ版漢字Talk6拡張版Shift_JIS 横書き用
    • 90pv-RKSJ-H
      アドビシステムズ版MacJapanese 横書き用
    • Add-RKSJ-H
      アドビシステムズ版富士通FMR拡張版Shift_JIS 横書き用
    • Add-RKSJ-V
      アドビシステムズ版富士通FMR拡張版Shift_JIS 縦書き用
    • Ext-RKSJ-H
      アドビシステムズ版NEC拡張版Shift_JIS 横書き用
    • Ext-RKSJ-V
      アドビシステムズ版NEC拡張版Shift_JIS 縦書き用
    • EUC-H
    • EUC-V
    • H
    • V

その他の文字コード[編集]

  • TRONコード
  • 住基ネット
    • 統一文字コード
      住民基本台帳ネットワーク統一文字(戸籍統一文字とは異なる)を符号化したもの。
  • デジタル放送
  • 人名
  • コード会
    • いわゆるコード会のコード

参考文献[編集]

  • 安岡孝一、安岡素子『文字コードの世界』東京、東京電機大学出版局、1999年9月、ISBN 4-501-53060-X
  • 小池和夫、府川充男、直井靖、永瀬唯『漢字問題と文字コード』東京、太田出版、1999年10月、ISBN 4-87233-486-8
  • 『bit』2001年4月号別冊、小林龍生・安岡孝一・戸村哲・三上喜貴編「インターネット時代の文字コード」東京、共立出版、2001年4月、ISBN 4-320-12038-8
  • 三上喜貴『文字符号の歴史』アジア編、東京、共立出版、2002年3月、ISBN 4-320-12040-X
  • Ken Lunde 『CJKV日中韓越情報処理』、東京、オライリー・ジャパン、2002年12月、ISBN 4-87311-108-0
  • 安岡孝一、安岡素子『文字符号の歴史』欧米と日本編、東京、共立出版、2006年2月、ISBN 4-320-12102-3

脚注[編集]

  1. ^ : coded character set
  2. ^ : character encoding scheme
  3. ^ http://docs.oracle.com/cd/E19455-01/806-5582/6jej6u9sp/index.html
  4. ^ Freed and Postel. 参考文献, ‘1.3. Charset’, p.1.

関連項目[編集]

外部リンク[編集]