文字コード

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動

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

概説[編集]

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

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

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

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

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

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

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

文字コードを、以下の2段階に区別する場合がある。

「符号化文字集合」や「文字符号化方式」といった用語は標準化団体によっても定義が異なるため、「これは符号化文字集合だ、いや文字符号化方式だ」といった議論は意味をなさないことがある。元来、文字コードは文字の集合の各文字に直接一意なバイト表現を割り当てただけのシンプルなものだったが、JIS X 0208というひとつの文字集合に対してISO-2022-JPEUC-JPShift_JISなど複数の符号化方式が存在するようになってきたり、逆に複数の文字集合を切り替えて使うISO-2022-JPEUC-JPといった符号化方式が用いられるようになってきたため、「符号化文字集合」と「文字符号化方式」とを区別するようになったと考えられる。

両者の区分は IETF では用いられる一方、ISO/IECJIS では「文字符号化方式」を「符号化文字集合の構造」あるいは「文字符号の構造及び拡張法」として規定している。

Unicode文字符号化モデル[編集]

Unicode文字符号化モデル[1]では更に進んで、文字コードは以下の4段階に分けられる。

  • 抽象文字集合ACR):符号化の対象とする順序のない文字の集合。ただし一般的な「文字」とは異なる場合があり、書記素と混同するべきではない[2]
  • 符号化文字集合CCS):抽象文字集合を非負整数に対応させたもの。この非負整数の範囲を符号空間、各値を符号位置といい、抽象文字は対応後、符号化文字となる[3]。抽象文字は複数の符号化文字に対応されることもある(異体字セレクタ[4]。Unicodeでは代用符号位置・非文字符号位置・未割り当て符号位置があるため、すべての符号位置が抽象文字と対応しているわけではない[5]
  • 文字符号化形式CEF):符号化文字集合の非負整数を符号単位列に変換する方法。文字符号化形式によってはひとつの符号化文字が複数の符号単位になる場合がある(サロゲートペア)。これを含め、文字により異なる長さの符号単位列となる文字符号化形式を可変幅、どの文字を変換しても同じ長さの符号単位列になるものを固定幅という。文字符号化形式はコンピュータ中に実際にデータとして文字を表現することを可能にする。
  • 文字符号化方式CES):符号単位列をバイト列に直列化する方法。符号単位が8ビットより大きい場合はエンディアンが関係してくる。

その後バイト列を、gzipなどで圧縮したり、7ビット伝送路に通すためBase64uuencodeBinHexQuoted-printableなどで変換することがあるがこれらは文字コードの範囲外である。

類似の用語[編集]

コードセット
この語はたとえば、ソフトウェアの実装において、任意の文字コードが扱えるよう実装すること(たとえばruby 1.9のStringオブジェクト)を指してコードセット独立(CodeSet Independent, CSI)といったように使われる[6]
キャラクタセット
MIME ではキャラクタセット英語: charset または character set)という概念が用いられる。言葉通りには「文字集合」であるが、実際に意味しているものは文字コードに近い。
この「キャラクタセット」は「オクテットの並びを文字の並びに変換する方式」等と定義されている[7]。MIME で実現する電子メールメッセージなどの処理を主眼に置いた概念である。
インターネット上で用いることのできる「キャラクタセット」の登録と公開は IANA が行っている(「外部リンク」参照)。
文字マップ
Unicode文字符号化モデルでは、文字列をバイト列に変換する4段階の操作を総称して文字マップ (英語: Character Map; CM) と呼ぶ[8]
コードページ
IBMマイクロソフトは独自に文字コードに番号(コードページ)を振って管理している。
エンコーディング
XMLにおいては、文字コードの宣言としてencodingという用語を用いている。

外字[編集]

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

外字というユーザが独自に文字を登録できる領域がある文字コードは複数存在する。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で改訂された。JIS X 0221の内、「日本文字部分レパートリ」はJIS X 0221 附属書JAという制限部分集合として定義する。

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

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

参考文献[編集]

  • 安岡孝一、安岡素子『文字コードの世界』東京、東京電機大学出版局、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. ^ UTR#17: Unicode Character Encoding Model” (English). The Unicode Consortium (2008年11月11日). 2019年5月21日閲覧。
  2. ^ The Unicode Standard Version 12.0 (PDF)” (English). The Unicode Consortium. p. 90 (2019年5月7日). 2019年5月23日閲覧。 “An abstract character does not necessarily correspond to what a user thinks of as a “character” and should not be confused with a grapheme.”
  3. ^ The Unicode Standard Version 12.0 (PDF)” (English). The Unicode Consortium. p. 29 (2019年5月7日). 2019年5月21日閲覧。 “The range of integers used to code the abstract characters is called the codespace. A particular integer in this set is called a code point. When an abstract character is mapped orassigned to a particular code point in the codespace, it is then referred to as an encodedcharacter.”
  4. ^ The Unicode Standard Version 12.0 (PDF)” (English). The Unicode Consortium. p. 29 (2019年5月7日). 2019年5月21日閲覧。 “an abstract character may be represented by a sequence of two (or more) other encoded characters.”
  5. ^ The Unicode Standard Version 12.0 (PDF)” (English). The Unicode Consortium. p. 30 (2019年5月7日). 2019年5月21日閲覧。 “Not all assigned code points represent abstract character.”
  6. ^ http://docs.oracle.com/cd/E19455-01/806-5582/6jej6u9sp/index.html
  7. ^ Freed and Postel. 参考文献, ‘1.3. Charset’, p.1.
  8. ^ UTR#17: Unicode Character Encoding Model” (English). The Unicode Consortium (2008年11月11日). 2019年7月20日閲覧。 “a mapping from sequences of members of an abstract character repertoire to serialized sequences of bytes bridging all four levels in a single operation”
  9. ^ 【事例編】JTB、基幹系プラットフォームを刷新 - 進化するITプラットフォーム Part8

関連項目[編集]

外部リンク[編集]