170 likes | 260 Views
コンピュータが文字を覚えるとは ― 文字コード ―. 科学・技術の世界「日本語とコンピューター」 担当 小野芳彦(文学研究科). Characters are numbered. コンピュータは数しか計算しないので、文字をあつかう場合も整数に直して処理する。文字を番号(符号)に直すことを「符号化する」という。 Computers send a message not as a string 文 字 ⇒ but as a sequence 149, 182, 142, 154
E N D
コンピュータが文字を覚えるとは―文字コード―コンピュータが文字を覚えるとは―文字コード― 科学・技術の世界「日本語とコンピューター」 担当 小野芳彦(文学研究科)
Characters are numbered コンピュータは数しか計算しないので、文字をあつかう場合も整数に直して処理する。文字を番号(符号)に直すことを「符号化する」という。 • Computers send a message not as a string 文 字 ⇒but as a sequence 149, 182, 142, 154 「文字」という語句は、コンピュータにとっては「149 182 142 154」という番号の列である。電子メールで文章を送るという場合でも、コンピュータは実は番号の列を送っている。
Characters are numbered • Character code = Transliteration Table between characters and numbers 文字コード(セット)とは文字を番号に直し、番号を文字に直すための対応表である。 • Computer communication needs an equivalent character code in both side. 受け手側の対応表が送り手側の対応表と異なっていると、番号を元の文字にもどすことができず、意味不明の文字の羅列になる。
History of Character Codes • ASCII:1962 1962年に、アメリカのJISにあたるANSIという団体がASCII(アスキーと読む)という情報交換用文字コードを制定した。ASCIIは7bit(0から127までの128の数字)で文字をあらわすが、最初の32個は制御符号(「改行」や「処理中止」、「送信終了」)に使い、残りの96文字のうち、32と127を除いた33~126までの94の番号に「a」、「b」、「1」、「2」、「!」などの文字を配置する。ASCIIは他のマシンとの情報交換に用いるコードだが、設計がすぐれていたので、英語圏では内部処理にも使われるようになった。
Examples たとえば、Hello!というあいさつは、コンピュータの内部では2進数(1と 0であらわされるbinary number)であらわされた番号の集まりである(a)。 今、Hallo! と間違えてタイプした(b)としても、スペルチェッカーの辞書には(a)に示した正しい番号が記録されているので、それと照合し、2番目の番号「1100001」が間違っていることを発見し、「1100101」にしろと教える。 1001000 :H 1100101 :e 1101100 :l 1101100 :l 1101111 :o 0100001 :! 1001000 1100001 1101100 1101100 1101111 0100001 0000000 0000100 0000000 0000000 0000000 0000000 (a) - (b) =
コードポイント • 「1100001」が「a」をあらわし、「1100101」が「e」をあらわすというのは、コンピュータを作った人間が勝手に決めたことで、根拠はない。 • どの番号がどの文字をあらわすかは約束にすぎず、これが文字コードの本質である。 • 文字をあらわす番号のことをコードポイントということもある。 • コードポイントの一セットがコードである。
ISO 646:1967 • International Standard ⊃ National Standards ASCIIを元にISO 646という規格作成 • 各国語にアルファベットを拡張 フランス語でÇやâ、ドイツ語でëや'öのような修飾つきアルファベットが必要 ISO 646のいくつかのコードポイントをその国固有の文字に換えてよい • 多国語環境でのISO646 一部の文字を入れ換えた各国語版のISO 646は、その国の中だけで使うにはいいが、多国語環境では文字化けが起こる。 フランス語版「Ça est là.」 ドイツ語版「Öa est l§.」 日本語版「\a est l@.」
文字コード識別番号 • Each National Character Code has an ID number ISOでは各々の文字コードに識別番号をあたえ、その文書がなんの文字コード(コード表)で符号化されているかを明示するようにした。 文書の最初や、言語(=用字)が変わる位置にコード表の識別番号を置く ここからはなんというコード表を使っているかを明示 →文字化けが解決する。
多文字コードの規格ISO 2022 • さまざまなコード表を切り換えて情報交換する • 個々の文字コードが同一構造をとってる。 • 構造と切り換え方法を定めたのがISO 2022 • 例:インドのIS 13194 デーヴァナーガリー文字、タミル文字、ベンガル文字等々、インドで公用文字として認められているのは十の文字セット ISO 2022の構造に流しこむ。 • 世界の文字コードで国家規格となっているもののほとんどはISO 2022にもとづいて作られている。
JIS X 0201:1996(JIS C 6220-1969) • 日本のJIS X 0201はISO 646の日本版であるアルファベットと、カタカナ文字セットをISO 2022で符号化した文字コードの二本立て。 • アルファベットでは「\」を「\」に置きかえている。 • カタカナはいわゆる「半角カナ」であり濁音・半濁音記号が独立している。(ここでは文字数と記憶量は一致しないが、文字間隔の不ぞろいに我慢さえすれば実用的) • 8bit実装ではコードポイントの共用はない。 • 文字数と記憶量とが一致する。
漢字をコード化 • 1970年代にはいると、コンピュータの進歩によって、漢字を使えるようにしようという試みがあちこちではじまった。 • 新聞社、生命保険会社など、大型コンピュータを導入した多くの会社が、業務内容に応じた独自の漢字コードの制定に着手していた。 • 漢字は諸橋大漢和で約5万字、大正期から進められていた漢字制限論の成果というべき1949年の当用漢字表でも1850字であるから、7bit(128文字種)や8bit(256文字種)でおさまるはずがなかった。
JIS X 0208:1978 (JIS C 6226-1978) • ISO 2022では7bitないし8bitを複数組みあわせて、巨大な文字セットを符号化できる • JIS基本漢字は、文字セットの段階では「区点番号」と呼ばれる1~94の番号を二つ組みあわせることで、漢字一文字をあらわしている。 • 94×94=8836字までの文字を収録できるが、外字エリアや、将来の拡張のためのエリアがあけてあるので、実際には6879字(漢字は6349字)しか収録していない。
実装法 の混乱 • 最初、7bitで実装したため、ASCII(JISローマ字)やカタカナとは共存できなかった。 • シフトJISと呼ばれる実装法が私的に開発され、それが、マイクロソフト社に採用された。 • JIS文字の頭6ビット分がASCIIとカタカナが割り当てられていないコードポイントにシフトされている
EUC • ASCII(JISローマ字)とはコードポイントが重ならない実装法 • 漢字コードの一部をローマ字と誤認することがない • 拡張で最大4つの文字セットを同時に使える。 • Unix Macで一時的に使われたが、シフトJISの普及に及ばなかった
シフトJIS→Unicode • シフトJISは日本語専用の内部コードとしてなら実用的設計である。 • 内部コードとデータ通信にシフトJISを使うことにしたために、混乱が生まれた。 • 他の文字コードと区別できないので、日本ではフランス語やドイツ語、中国語、韓国語が扱えない状態がつづいた。 • 世界の国々で共通に使える内部コードが必要とされた。
Unicode • ユニコード・コンソーシアムという業界団体が開発 • 大きなコード表を一つ作り、その中に世界各国の文字をまとめて詰めこむ。 • 実装法としてUTF-8とUTF-16がある。 • 欧米はUTF-8で実装(8ビットの世界) • 中日韓(CJK)もUTF-8の第2面(8ビットと16ビットの混在世界)を望むが、3国の合計は65536字を超えてしまう。 • 形の同じ字(漢字)は共通のコードポイントに割り当てれば16ビットにおさまる。(全米の図書館の漢字処理の方式にならう) • ユニファイ作業はかなりの困難を伴った • 中国の簡体字は繁体字とユニファイしない。 • 韓国の漢字は別扱い。 (UCS-2から)
まとめ • コンピュータに文字(特に漢字)を扱わせるにあたっては、利用者の熱意(圧力?)が原動力として大いにはたらいていた。 • エンジニアはその時々の技術水準で文字を選び取り、情報処理用のコードを決めてきた • 文字の専門家の発言力は強くなかった。 • 文字コードの歴史は、混乱が混乱をよび、それを収集する歴史であった。