【文字コードとは】
文字を含みデータは全てコンピュータの処理上は0と1での扱いとなっているが、文字を表示する為に番号を採番して処理を行っているのである。たとえばAだったら41番というように変換する。Aを表示させたい場合は「41番の文字を表示させろ」という命令を発するのである。従って永久に端末としての処理であれば任意で良いのかもしれないが、ネットワークなどの環境面からも文字に割り振る番号は一意でなくてはならない。
【日本語と文字コード】
コンピュータは主にアメリカで発達してきたため、未だにアルファベットや数字などの1バイト(7/8ビット)を基本単位として扱う前提で作られているものが中心である。そのなかで日本語のように多くの文字を必要とする言語は、1文字を表わすのに2バイト以上を要するため、いろいろな困難が伴いう。特にインターネットを通じて様々な環境の情報を交換するにあたって、思わぬ問題に遭遇するケースが増えてきた。日本語の文字コードは統一されずに現在に至っている。現在主に使われている日本語コードはShift-JIS, JIS, EUCと言う3つである。この他unicodeがあり、「全世界統一文字コード体系」という試みも進行中であるが、まだ開発段階上といえる。
【JIS】
JISコードはその名の通り,JIS(日本工業規格)で規格化された文字コードで、こちらはISO(International Organization for Standardization: 国際標準化機構)にも,ISO-2022-JPとして標準化されている。標準化されていると言う事はインターネット上で使われる日本語文字コードはJISが推奨されると言うことです。事実,メールデータは一部のメールソフトをのぞき,ほとんどはこのJISコードを用いて送信されている。
JIS漢字コードは「図形文字とそれらのビット組合せとの対応を規定する」規格であるとされている。1978年1月1日に最初のものが発表され(JIS C 6226-1978)、1983年の改訂を経て1990年9月のJIS X 0208-1990によって現在の6,879文字の“漢字集合”が定められた。このX 0208は1997年1月に再度改訂され、従来曖昧だった部分をより厳密にするとともに、シフトJISやRFC1468などの符号化法もJISに取り込んだ(JIS X 0208:1997)。
この規格は正式には「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」と呼ばれ、図形文字の集合(文字セット)として6,879文字が定められている。このうち、かなや記号を除いた漢字は6,355字で、使用頻度に応じて第一水準と第二水準にわけられている。
使用頻度の高い第一水準は2,965字あり、基本的に音読みの50音順に並んでいる(音読みのないものや複数の読みのあるものは一つを「代表音訓」と定めてそれによって並べる)。第二水準は頻度はそれほど高くないが重要なものと、人名などによく使われる旧字体が3,390字選ばれ、こちらは漢和辞典のように部首順(部首内では画数順)に並べられた。
さらに、1990年10月には6,067文字の補助漢字文字セット(JIS X 0212-1990)が制定されました。この文字セットとJIS X 0208-1990を合わせれば12,946(うち漢字は12,156)の標準文字が使えることになるが、この補助漢字をサポートする製品はほとんどないのが実状である。
2000 JIS (X 0213) 1997 JIS(X 0208:1997)の公開後、引き続き検討されてきたJIS漢字コードの拡張(第三水準及び第四水準)が、2000年1月20日にJIS X 0213:2000として制定された。X 0213はX 0208の6,879文字にさらに4,344文字を追加して合計11,223字が規定されている。この追加により、従来は「機種依存文字」とされていた○付数字や、JIS批判の標的になっていた人名漢字の多くが正式な規格になった。
ただ、この規格がパソコンなどに実装されるには、Unicodeとの関連もあってしばらく時間がかかると見られている。アップルコンピュータは、次期OSのMacOS Xで2000JISに対応した新フォントを搭載し、Unicodeに登録された文字から順次収録するとしている。
【Shift-JIS】
Shift-JISはクライアントOS(WindowsやMacOS)で主に用いられている文字コードで、これにはほかの文字コードセットにはない半角カナを備えているのが特徴である。 現在パソコンの多くで使われている文字コードで、SJIS、MS漢字とも呼ばれる。これは1バイト仮名(X 0201)で未定義領域になっている部分を使って漢字(X 0208)を表現することで、エスケープシーケンスなしで1バイト文字と2バイト文字を共存できるようにしたものである。そのためにJISコードを移動(シフト)させたことからこう呼ばれている。
シフトJISでは、10進数の129~159、224~239(0x81~0x9F、0xE0~0xEF)の範囲のバイトが現れると2バイトモードが開始され、このバイトは2バイト文字の第1バイトとして処理される。続く第2バイトは64~126、128~252(0x40~0x7E、0x80~0xFC)の範囲でなければならない。第1バイトの範囲は、英数字(ASCII、0x21~0x7E)や1バイト仮名(半角カナ、0xA1~0xDF)と重複しないように配置されている。JISコードとは簡単なアルゴリズムで相互変換が可能である。
このように、このシフトJISのコードは8ビット目も使用しているため、電子メールで流すときはJISコードに変換する必要がある。事実上日本で最も普及している文字コードであり、文字セット切り替えがないので扱いも簡単というメリットがあるが、コードが分断されており体系として不自然なため漢字処理に一家言を持つ人の間では嫌われているようである。
また、この方式ではJIS X 0212-1990の補助漢字文字セットを使う方法がないこと、ユーザー定義領域にメーカー独自の「外字」を割り当てたため、相互の情報交換やほかの方式への変換ができないケースがあるなどの問題も抱えている。
【EUC】
EUCは主にUNIXで用いられている文字コードで、Linuxを含むUNIXではこちらが標準に用いられている。日本語EUCもJISコードと同じくJIS 0208の文字セット規格をISO 2022-1993に基づいて符号化する。EUC自身は、日本語だけでなく複数の文字セットを同じテキスト内で処理することが可能である。
EUCには可変長コードと固定長コードの2通りあるが、一般的なのは可変長(圧縮フォーマット)の方である。簡単に言って4とおりの文字セットが使い分けられる。
ASCIIに相当する部分は1バイト(7ビット)で表現される。0xA0~0xFFの範囲の文字は、そのまま使われる場合は2バイト合わせてJIS X 0208の漢字(JISコードの8ビット目を1にしたもの)を表す。1バイト仮名は0x8Eという特別な制御文字(SS2)に続いて1バイトの文字コードを割り当てる。0x8Fという制御文字(SS3)はその後ろに2バイトの文字コードをとるが、このセットは一般に補助漢字に割り当てられる。
【UNICODE】
国際標準化機構(ISO)は、世界中の主要な文字を一括して扱う多重言語文字セット規格UCS (Universal multi-octet coded Character Set)を1993年に制定した。これがISO/IEC 10646と呼ばれるもので、4バイトによる方式と2バイトによる方式の2通りがある。もともとこれは各国の国内規格との互換性を考慮したものとして考えられていたのだが、一方で、アメリカのコンピュータ・メーカーを中心とするUnicodeコンソーシアムがこれとは異なる、16ビットで従来方式とは互換のない統一コードUnicodeを打ち出してきた。国際標準が2つできてしまうのは非常に具合が悪いので、両者が歩み寄る形で、ISOの当初の案を変更して新しい標準を制定することになった。
UnicodeはUCSの2バイト方式によるもので、256×256の升目を持つ二次元空間(Basic Multilingual Plane=BMPと呼ばれる)に65,536文字を割り当てることがでる。
この中に中国語、日本語、韓国語(頭文字を取ってCJKと称される)の漢字2万文字あまりを配置している。それに当たっては、各国で用いられている漢字コード(全部を合わせると12万以上になる)から重複するものや意味、構造が同じものを統合し、まとめていくHan Unificationという作業が行われた(これについては厳しい批判がある)。日本の文字コードとしてはJIS X 0208-1990とJIS X 0212-1990がサポートされる。
大まかに言えば、Unicodeにおける漢字の表現は、第1バイトを0x4E~0x9F(I領域)に割り当てたものである(第2バイトは0x00~0xFFの全領域)。JISコードとの規則的な変換ルールは存在しないので、個々の文字を対応させる変換表が必要になる。
Unicodeは16ビット固定なので、文字列の操作が単純になる(と宣伝されているが)。2.0では38,885文字が割り当てられ、これらのコードポイントは永久的なアドレスとして信頼すべきものと(Unicodeの主張では)されている。一方、Unicodeでは従来の文字コードで想定されていたソートが保証されない。
Windows NTやMacOS 8など内部コードとしてUnicodeをサポートするという環境も出始め、JavaはUnicodeをデフォルトのデータ型として定義した。Webの世界でも、最新のブラウザは(モジュールの追加により)Unicodeを表示できるようになっているし、HTML 4.0では基本文字セットをISO/IEC 10646とするなど、最近の展開は急速である。
文字を含みデータは全てコンピュータの処理上は0と1での扱いとなっているが、文字を表示する為に番号を採番して処理を行っているのである。たとえばAだったら41番というように変換する。Aを表示させたい場合は「41番の文字を表示させろ」という命令を発するのである。従って永久に端末としての処理であれば任意で良いのかもしれないが、ネットワークなどの環境面からも文字に割り振る番号は一意でなくてはならない。
【日本語と文字コード】
コンピュータは主にアメリカで発達してきたため、未だにアルファベットや数字などの1バイト(7/8ビット)を基本単位として扱う前提で作られているものが中心である。そのなかで日本語のように多くの文字を必要とする言語は、1文字を表わすのに2バイト以上を要するため、いろいろな困難が伴いう。特にインターネットを通じて様々な環境の情報を交換するにあたって、思わぬ問題に遭遇するケースが増えてきた。日本語の文字コードは統一されずに現在に至っている。現在主に使われている日本語コードはShift-JIS, JIS, EUCと言う3つである。この他unicodeがあり、「全世界統一文字コード体系」という試みも進行中であるが、まだ開発段階上といえる。
【JIS】
JISコードはその名の通り,JIS(日本工業規格)で規格化された文字コードで、こちらはISO(International Organization for Standardization: 国際標準化機構)にも,ISO-2022-JPとして標準化されている。標準化されていると言う事はインターネット上で使われる日本語文字コードはJISが推奨されると言うことです。事実,メールデータは一部のメールソフトをのぞき,ほとんどはこのJISコードを用いて送信されている。
JIS漢字コードは「図形文字とそれらのビット組合せとの対応を規定する」規格であるとされている。1978年1月1日に最初のものが発表され(JIS C 6226-1978)、1983年の改訂を経て1990年9月のJIS X 0208-1990によって現在の6,879文字の“漢字集合”が定められた。このX 0208は1997年1月に再度改訂され、従来曖昧だった部分をより厳密にするとともに、シフトJISやRFC1468などの符号化法もJISに取り込んだ(JIS X 0208:1997)。
この規格は正式には「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」と呼ばれ、図形文字の集合(文字セット)として6,879文字が定められている。このうち、かなや記号を除いた漢字は6,355字で、使用頻度に応じて第一水準と第二水準にわけられている。
使用頻度の高い第一水準は2,965字あり、基本的に音読みの50音順に並んでいる(音読みのないものや複数の読みのあるものは一つを「代表音訓」と定めてそれによって並べる)。第二水準は頻度はそれほど高くないが重要なものと、人名などによく使われる旧字体が3,390字選ばれ、こちらは漢和辞典のように部首順(部首内では画数順)に並べられた。
さらに、1990年10月には6,067文字の補助漢字文字セット(JIS X 0212-1990)が制定されました。この文字セットとJIS X 0208-1990を合わせれば12,946(うち漢字は12,156)の標準文字が使えることになるが、この補助漢字をサポートする製品はほとんどないのが実状である。
2000 JIS (X 0213) 1997 JIS(X 0208:1997)の公開後、引き続き検討されてきたJIS漢字コードの拡張(第三水準及び第四水準)が、2000年1月20日にJIS X 0213:2000として制定された。X 0213はX 0208の6,879文字にさらに4,344文字を追加して合計11,223字が規定されている。この追加により、従来は「機種依存文字」とされていた○付数字や、JIS批判の標的になっていた人名漢字の多くが正式な規格になった。
ただ、この規格がパソコンなどに実装されるには、Unicodeとの関連もあってしばらく時間がかかると見られている。アップルコンピュータは、次期OSのMacOS Xで2000JISに対応した新フォントを搭載し、Unicodeに登録された文字から順次収録するとしている。
【Shift-JIS】
Shift-JISはクライアントOS(WindowsやMacOS)で主に用いられている文字コードで、これにはほかの文字コードセットにはない半角カナを備えているのが特徴である。 現在パソコンの多くで使われている文字コードで、SJIS、MS漢字とも呼ばれる。これは1バイト仮名(X 0201)で未定義領域になっている部分を使って漢字(X 0208)を表現することで、エスケープシーケンスなしで1バイト文字と2バイト文字を共存できるようにしたものである。そのためにJISコードを移動(シフト)させたことからこう呼ばれている。
シフトJISでは、10進数の129~159、224~239(0x81~0x9F、0xE0~0xEF)の範囲のバイトが現れると2バイトモードが開始され、このバイトは2バイト文字の第1バイトとして処理される。続く第2バイトは64~126、128~252(0x40~0x7E、0x80~0xFC)の範囲でなければならない。第1バイトの範囲は、英数字(ASCII、0x21~0x7E)や1バイト仮名(半角カナ、0xA1~0xDF)と重複しないように配置されている。JISコードとは簡単なアルゴリズムで相互変換が可能である。
このように、このシフトJISのコードは8ビット目も使用しているため、電子メールで流すときはJISコードに変換する必要がある。事実上日本で最も普及している文字コードであり、文字セット切り替えがないので扱いも簡単というメリットがあるが、コードが分断されており体系として不自然なため漢字処理に一家言を持つ人の間では嫌われているようである。
また、この方式ではJIS X 0212-1990の補助漢字文字セットを使う方法がないこと、ユーザー定義領域にメーカー独自の「外字」を割り当てたため、相互の情報交換やほかの方式への変換ができないケースがあるなどの問題も抱えている。
【EUC】
EUCは主にUNIXで用いられている文字コードで、Linuxを含むUNIXではこちらが標準に用いられている。日本語EUCもJISコードと同じくJIS 0208の文字セット規格をISO 2022-1993に基づいて符号化する。EUC自身は、日本語だけでなく複数の文字セットを同じテキスト内で処理することが可能である。
EUCには可変長コードと固定長コードの2通りあるが、一般的なのは可変長(圧縮フォーマット)の方である。簡単に言って4とおりの文字セットが使い分けられる。
ASCIIに相当する部分は1バイト(7ビット)で表現される。0xA0~0xFFの範囲の文字は、そのまま使われる場合は2バイト合わせてJIS X 0208の漢字(JISコードの8ビット目を1にしたもの)を表す。1バイト仮名は0x8Eという特別な制御文字(SS2)に続いて1バイトの文字コードを割り当てる。0x8Fという制御文字(SS3)はその後ろに2バイトの文字コードをとるが、このセットは一般に補助漢字に割り当てられる。
【UNICODE】
国際標準化機構(ISO)は、世界中の主要な文字を一括して扱う多重言語文字セット規格UCS (Universal multi-octet coded Character Set)を1993年に制定した。これがISO/IEC 10646と呼ばれるもので、4バイトによる方式と2バイトによる方式の2通りがある。もともとこれは各国の国内規格との互換性を考慮したものとして考えられていたのだが、一方で、アメリカのコンピュータ・メーカーを中心とするUnicodeコンソーシアムがこれとは異なる、16ビットで従来方式とは互換のない統一コードUnicodeを打ち出してきた。国際標準が2つできてしまうのは非常に具合が悪いので、両者が歩み寄る形で、ISOの当初の案を変更して新しい標準を制定することになった。
UnicodeはUCSの2バイト方式によるもので、256×256の升目を持つ二次元空間(Basic Multilingual Plane=BMPと呼ばれる)に65,536文字を割り当てることがでる。
この中に中国語、日本語、韓国語(頭文字を取ってCJKと称される)の漢字2万文字あまりを配置している。それに当たっては、各国で用いられている漢字コード(全部を合わせると12万以上になる)から重複するものや意味、構造が同じものを統合し、まとめていくHan Unificationという作業が行われた(これについては厳しい批判がある)。日本の文字コードとしてはJIS X 0208-1990とJIS X 0212-1990がサポートされる。
大まかに言えば、Unicodeにおける漢字の表現は、第1バイトを0x4E~0x9F(I領域)に割り当てたものである(第2バイトは0x00~0xFFの全領域)。JISコードとの規則的な変換ルールは存在しないので、個々の文字を対応させる変換表が必要になる。
Unicodeは16ビット固定なので、文字列の操作が単純になる(と宣伝されているが)。2.0では38,885文字が割り当てられ、これらのコードポイントは永久的なアドレスとして信頼すべきものと(Unicodeの主張では)されている。一方、Unicodeでは従来の文字コードで想定されていたソートが保証されない。
Windows NTやMacOS 8など内部コードとしてUnicodeをサポートするという環境も出始め、JavaはUnicodeをデフォルトのデータ型として定義した。Webの世界でも、最新のブラウザは(モジュールの追加により)Unicodeを表示できるようになっているし、HTML 4.0では基本文字セットをISO/IEC 10646とするなど、最近の展開は急速である。