文字コード
文字コード(もじコード)はコンピュータ上で文字(キャラクタ (コンピュータ))を利用するために各文字に割り当てられるバイト表現。もしくは、バイト表現と文字の対応関係(文字コード体系)のことを指して「文字コード」と呼ぶことも多い。本記事では主に後者について記述する。
目次
概説
文字コードとは、コンピュータなどの電子媒体において、文章を画像などの図形データとして扱わずに、テキストの形式で扱う場合に、その各文字(単一の文字でない場合もある)に対して持っているコードのことである。
文字を特定の符号で扱う手段はコンピュータが誕生するよりも昔から存在した(モールス符号などもそのようにして使用された文字を符号化した情報の一種である)。また、文字を表形式にして扱う方法も古くから存在し(日本語の仮名の五十音図もその一種である)、利用されてきた。コンピュータにおいては、文字などを表形式などを用いて体系的に符号化した利用がその性質上強く行われ、それらが文字コードとなっている。
文字コードの歴史は電気通信の歴史とほぼ等しい。古くはテレックスで用いられた国際電信アルファベット第2、アメリカ規格協会 (ASA) が定めた ASCII、IBM によって開発された EBCDIC 等があった。しかしコンピュータシステムが多くの言語圏で利用されるようになるにつれて文字コードの種類も増大し、現在では100種類以上の代表的な文字コードが存在する。
コンピュータの発展が早かった英語圏やその他のアルファベットを使用する言語(主に西洋)、日本語、中国語、韓国語などは早くから言語固有の文字コードが制定され利用可能になった。その他の大部分の言語もUnicodeの普及とともにコンピュータ上で文字を正常に表現することができるようになりつつある。
多様な文字コードの存在は文字コードの互換性問題をひきおこす。文字コードの互換性問題とは、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題である。日本語では、これは特殊な漢字(苗字や団体名に使われる漢字)などが入ったデータベースを扱うときなどに問題となる。また文字コードの変換にかかるコストはばかにならないことが多い。
近年、これらの互換性問題を解決するためにすべての言語の文字コードを1つの文字コードで対応する試みである Unicode が作られ、オペレーティングシステムや Java などの内部コードとして広く利用されている。Microsoft Windows や Mac OS X などの最近の OS は、表面上は Unicode 以外の文字コードを使っていても内部処理上は Unicode に変換して処理しているものが多い。この場合、字によっては、Unicode と各文字コードの変換テーブルが OS によって異なるなどの問題が生じる場合がある。
(符号化)文字集合、(文字)符号化方式
文字コードに関して、(符号化)文字集合(CCS[1])と(文字)符号化方式(CES[2])という区別がなされることがある。
文字コードには、文字集合は等しいが符号化方式だけが異なる文字コードと、そもそも対象としている文字集合そのものが異なる文字コードがある。たとえば、日本語には JIS X 0208 というひとつの文字集合に対して ISO-2022-JP (JIS コード等と呼ばれることが多い)、EUC-JP、Shift_JIS など複数の符号化方式が存在する。Unicode にも単一の文字集合に対して UTF-8、UTF-16、Punycode などの異なる符号化方式が存在する。また、それぞれ異なる文字集合を同じ符号化方式とする関係もあり、例えば符号化方式 EUC に対して EUC-JP、EUC-KR、GB2312 (EUC-CN) などがある。通常、文字コードといえば符号化方式をさすこともあれば、文字集合と結合させた概念(キャラクタセット、符号化表現あるいは文字マップ)として語られることもある。これには、ISO/IEC 8859 や Big5 のように、文字集合と符号化方式が事実上一体化している体系が少なからず存在することも影響している。
もっとも、「符号化文字集合」や「文字符号化方式」といった用語は標準化団体によっても定義が異なるため、「これは符号化文字集合だ、いや文字符号化方式だ」といった議論は意味をなさないことがある。元来、文字コードは文字の集合の各文字に一意なバイト表現を割り当てただけのシンプルなものだったが、バイト値を計算によって変形した符号化表現が用いられるようになってきたため(例えば Shift_JIS や UTF-8)、「符号化文字集合」と「文字符号化方式」とを区別するようになったと考えられる。両者の区分は Unicode や IETF では用いられる。一方、ISO/IEC や JIS では「文字符号化方式」を「符号化文字集合の構造」あるいは「文字符号の構造及び拡張法」として規定している。
コードセット
Unicodeでは、単一のUnicode文字集合と、どれかひとつのエンコーディングを使用するため必要のない概念であるが、たとえばEUC-JPを例にとると、「ASCII」「JIS X 0208を(符号化としての)EUCで符号化したもの」「その他」を一緒にして使うもの、が「EUC-JP」である。このような、あるテキストにおいて使われる文字コードの1個乃至複数個の規約のセット、とでもいうようなものを指してコードセットと言う。この語はたとえば、ソフトウェアの実装において、任意の文字集合・符号化が扱えるよう実装すること(たとえばruby 1.9のStringオブジェクト)を指してコードセット独立(CodeSet Independent, CSI)といったように使われる[3]。
コードセットに相当する概念には、以下で述べるように様々な用語が使われている。
MIME
MIME ではキャラクタセット(テンプレート:Lang-en)という概念が用いられる。言葉通りには「文字集合」であるが、実際に意味しているものはコードセットに近い。
この「キャラクタセット」は「オクテットの並びを文字の並びに変換する方式」等と定義されている[4]。MIME で実現する電子メールメッセージなどの処理を主眼に置いた概念である。ネットワーク上の符号化表現をなんらかの文字の集合に写像するための変換方式が互いに異なれば、それらは互いに異なる「キャラクタセット」である。言い換えると、文字符号化方式と符号化文字集合とをまとめたものが、ここにおける「キャラクタセット」である。このため、一般に「キャラクタセット」では、符号化表現と文字とが一対一に対応するとは限らない。
インターネット上で用いることのできる「キャラクタセット」の登録と公開は IANA が行っている(「外部リンク」参照)。
日本工業規格 (JIS) では、このMIMEでの「キャラクタセット」を追認する形で、いくつかの「キャラクタセット」を符号化表現として規格化している。また、MIMEより後に制定されたXMLにおいては、文字符号化の宣言としてcharsetではなくencodingという用語を用いている。
Unicode
Unicodeでは文字マップ (テンプレート:Lang-en; CM) という。Unicodeの文字マップは抽象文字レパートリに含まれる文字の組合わせから直列化バイト列への写像として定義されている。一つのCCS、CEF及びCESを暗黙に含む単純文字マップは、概念上の文字から符号単位さらにバイトへの写像である。複合的なCESを含む複合文字マップには、一つ以上のCCSとCEFが含まれる。この場合の、文字マップの抽象文字レパートリは、関連する符号化文字集合で扱われるレパートリの和集合である。
文字マップは、IBMの文字データ表現体系 (CDRA) においてはコード化文字セット識別コード (テンプレート:Lang-en; CCSID) によって識別される。文字マップはcharsetやキャラクタセットの他に、(広義の)コード・ページ (テンプレート:Lang-en)、CHARMAP(POSIX国際化機能の文字集合記述ファイル)などと呼ばれることもある。
Unicodeでは多くの場合、UTF-16BEのように、文字マップと文字符号化方式の両方に同じ名称が使用される。たいていはそのような使用法が文脈によって明確なときに単純文字マップについて行われる。
外字
テンプレート:Main 外字とは表外字(規格表の外の文字)の略であり、ユーザがデザインして用いるユーザ定義文字や、メーカーなどが定義した環境依存文字(いわゆる機種依存文字)もしくはベンダ拡張漢字のことを指す。
外字というユーザが独自に文字を登録できる領域がある文字コードは複数存在する。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バイト系文字コードは、俗に「半角文字」と呼ばれることもある。
- US-ASCII (ASCII [ANSI INCITS 4] 対応)
- ISO/IEC 646
- ISO646-JP
- ISO/IEC 8859 (ISO/IEC 8859-1 〜 ISO/IEC 8859-16)
- ISO-8859-1 (ISO/IEC 8859-1 対応)
- ISO-8859-5 (ISO/IEC 8859-5 対応)
- ISO-8859-6 (ISO/IEC 8859-6 対応)
- ISO-8859-7 (ISO/IEC 8859-7 対応)
- ISO-8859-11 (ISO/IEC 8859-11 対応)
- ISO-8859-15 (ISO/IEC 8859-15 対応)
- windows-1252 (Microsoft Windows Codepage 1252 対応)
- macintosh (MacRoman 対応)
- KOI8-R
- KOI8-U
- TIS-620
- EBCDIC
- JIS X 0201 (JIS ローマ字、カタカナ)
2バイト系符号化文字集合
2バイト系文字コードは、俗に「全角文字」と呼ばれることもある。
- JIS X 0208 (第一・第二水準漢字など)
- JIS X 0212 (補助漢字など)
- JIS X 0213 (JIS X 0208 に第三・第四水準漢字などを追加した文字集合。JIS X 0213:2004 は JIS2004 とも呼ばれる)
- GB 2312
- GB 18030
- KS X 1001 (KS C 5601)
- Big5
- CNS 11643
文字符号化方式と文字コード(キャラクタセット)
- ISO/IEC 2022 系(ISO/IEC 2022自体は文字符号化方式というより、そのフレームワークのようなものである)
- ISO-2022-JP (RFC 1468、俗に「JIS コード」と呼ばれる文字コード。JIS X 0208 対応)
- ISO-2022-JP-1 (RFC 2237、JIS X 0208 と JIS X 0212 に対応)
- ISO-2022-JP-2 (RFC 1554、多言語拡張。JIS X 0208、JIS X 0212、GB 2312、KS X 1001、ISO/IEC 8859-1、ISO/IEC 8859-7 対応)
- ISO-2022-JP-3 (JIS X 0213:2000 対応)
- ISO-2022-JP-2004 (JIS X 0213:2004 対応)
- ISO-2022-CN (RFC 1922、GB 2312、CNS 11643 [第一字面・第二字面]対応)
- ISO-2022-CN-EXT (RFC 1922、GB 2312、ISO-IR-165、CNS 11643 [第一字面から第七字面]対応)
- ISO-2022-KR (RFC 1557、KS X 1001 対応)
- ISO-2022-JP (RFC 1468、俗に「JIS コード」と呼ばれる文字コード。JIS X 0208 対応)
- EUC ……拡張 UNIX コード (EUC) 文字符号化方式を用いた8ビットの文字コード。ISO/IEC 2022 の8ビット符号化表現に相当する。
- EUC-JP (JIS X 0208 対応)
- EUC-JISX0213 (JIS X 0213:2000 対応)
- EUC-JIS-2004 (JIS X 0213:2004 対応)
- EUC-KR (RFC 1557、KS X 1001 対応)
- GB2312 (別名 EUC-CN。GB 2312 対応)
- EUC-TW (CNS 11643 対応)
- EUC-JP (JIS X 0208 対応)
- シフト符号化表現の文字符号化方式を用いた8ビットの文字コード。
- Shift_JIS (JIS X 0208 対応)
- Shift_JISX0213 (JIS X 0213:2000 対応)
- Shift_JIS-2004 (JIS X 0213:2004 対応)
- Windows-31J (Microsoft Windows Codepage 932 対応)
- x-Mac-Japanese (MacJapanese 対応)
- Shift_JIS (JIS X 0208 対応)
- その他の文字符号化方式を用いた7ビットの文字コード。
- HZ-GB-2312 (RFC 1842、RFC 1843、GB 2312 対応)
大規模文字集合
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 の文字符号化方式
- UTF-8
- UTF-16 文字符号化形式
- UTF-32 文字符号化形式
- UTF-7
- UTF-EBCDIC
- Standard Compression Scheme for Unicode (SCSU)
- Binary Ordered Compression for Unicode (BOCU-1)
印刷業界の文字集合
印刷業界においては、公的な文字コード規格では包摂されている異体字やグリフの相違を厳密に区別したいというニーズが強く存在する。 そのため、そのようなニーズに応える文字集合が企業ベースで策定されている。 一般的な情報交換に用いられることはない。
- 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コード
- 印刷機械貿易が開発した文字コード
- SKコード (SK72, SK78, 外字A, 外字B, 外字C)
- 新聞業界
- 電子書籍
- BBeB 標準文字セット
- ユニコードをベースにソニーが拡張
- 新潮文庫の100冊の外字
- 青空文庫外字
- BBeB 標準文字セット
ベンダごとの文字コード
以下は、主にメインフレーム・オフコンなどのプロプライエタリなレガシーコンピュータやレガシーなシステム、特殊な環境において利用される文字コードを含む。レガシーなものとの連携を目的とする場合を除き、パソコンで利用されることがないものが多い。
- マイクロソフト
- 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で表したもの
- cp932
- サン・マイクロシステムズ
- cp942C
- cp942の拡張
- cp943C
- cp943の拡張
- cp942C
- アップル
- MacJapanese
- アップル版Shift_JIS
- MacJapanese
- 富士通
- NEC
- 日立
- KEIS(78) 〈ケイスナナハチ〉
- メインフレーム(M シリーズ、AP シリーズ)で利用される。JIS C 6226-1978 を GR に展開し、その上方エリアに「拡張文字セット3」というベンダ選定拡張漢字を配置。
- KEIS(83) 〈ケイスハチサン〉
- メインフレーム(M シリーズ、AP シリーズ)で利用される。JIS X 0208-1983 を GR に展開し、その上方エリアに「拡張文字セット3」というベンダ選定拡張漢字を配置。
- KEIS(90) 〈ケイスキュウマル〉
- EUC-HJ
- KEIS(78) 〈ケイスナナハチ〉
- 日本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で利用される。
- IBM漢字 (DBCS-Host)
- 日本ユニシス
- 三菱電機
- JSII 〈ジェイエスツー〉(「MELCOM 漢字」とも呼ばれる)
- 三菱電機のメインフレームで利用される。JIS X 0208-1983 を GR に展開し、その上方エリアにベンダ選定拡張漢字を配置。
- JSII 〈ジェイエスツー〉(「MELCOM 漢字」とも呼ばれる)
- DEC
- DEC 漢字
- ミニコンの VAX 用 OS である VMS で利用される。JIS X 0208-1983 を GR に展開し、その左方エリアにベンダ選定拡張漢字を配置。
- Super DEC 漢字
- ミニコンの VAX 用 OS である VMS で利用される。JIS X 0208-1983 を GR に展開し、その左方エリアにベンダ選定拡張漢字を配置。そして、シングルシフトの GR 展開で JIS X 0212 を表現。
- 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コード
- 住基ネット
- 統一文字コード
- 住民基本台帳ネットワーク統一文字(戸籍統一文字とは異なる)を符号化したもの。
- 統一文字コード
- デジタル放送
- ARIB外字 ARIB STD-B24にある文字符号化
- 人名
- 筆まめ人名外字
- 戸籍統一文字
- コード会
- いわゆるコード会のコード
参考文献
- 安岡孝一、安岡素子『文字コードの世界』東京、東京電機大学出版局、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。
脚注
- ↑ テンプレート:Lang-en-short
- ↑ テンプレート:Lang-en-short
- ↑ http://docs.oracle.com/cd/E19455-01/806-5582/6jej6u9sp/index.html
- ↑ Freed and Postel. 参考文献, ‘1.3. Charset’, p.1.
関連項目
外部リンク
- IANA 文字集合レジストリ (IANA Character Set Registry) (IANA によって登録されている文字コードの情報一覧)
- 文字コードについて
- 文字コードの話
- 文字コード入門
- 対応文字コード一覧(eMailKit がサポートしている文字コードの一覧)
- UTR#17: Character Encoding Model(Unicodeの文字符号化モデル)
- RFC2130: The Report of the IAB Character Set Workshop held 29 February 1 March(IABが文字コードについて検討したレポート)
- Character Data Representation Architecture Reference(IBM文字データ表現体系(CDRA)リファレンス IBMのベンダー規格)
- Character Model for the World Wide Web 1.0: Fundamentals(W3CのWWW向け文字モデル:基本編)