未完成 2013年8月作成予定

文字コード研究・実践編 ★index     文字サイズ変更 


margaux
写真はChateau Margaux 1998

目次

▽電気通信の発達とAscii
▽コンピュータの歴史とEBCDIC
▽漢字のコード化
▽内部に潜む94進数・区点
▽第二世代の漢字と世界の文字コード
▽ユニコードの符号化方式
▽次の世代の漢字と文字コード

電気通信の発達とAscii

今日文字コード体系の大本になっているAscii(American standard code for information interchange)は
1963年6月17日に、American Standards Associationによって制定された。US-Asciiともいいます。
1963年の規格には英小文字はまだ無く、0x60~0x7eが追加されたのは1967年版です。
Ascii コード表
0123456789abcdef
0NULSHSXEXETEQAKBLBSHTLFHMCLCRSOSI
10EDD1D2D3D4NKSNEBCNEMSBEC
20SP"!#$%&'()*+,-./
300123456789:; <=>?
40@ABCDEFGHIJKLMNO
50PQRSTUVWXYZ[\]^_
60`abcdefghijklmno
70pqrstuvwxyz{|}~DEL
上の表の縦軸と横軸は16進数による表示です。

16進数とは、数値を1桁0~9とA,B,C,D,E,F(または0~9とa,b,c,d,e,f)で表した表現です。
このホームページでは16進数を表す記号として、0x を用い、例えば0x10なら10進数の16に相当します。
また、ユニコードのコードポイントを表す場合はU+に続く16進表現を用います。

0x00~0x1fは制御コードです。
▼Asciiの制御コードの詳細はこちら

0x20はスペースです。制御コードでなく、印刷可能文字でもない特殊な文字です。
0x7fは削除記号です。編集済テキストファイルには存在しません。紙テープの時代の名残りです。
0x7fは2進表現では1111111になり、穿孔パターンは●●●●●●●で、既存値を完全に上書きします。

Asciiは当初はコンピュータ用ではなく、テレタイプ用の文字コードとして設定されましたが、すぐに
テレタイプ端末がコンピュータ用端末として流用されるようになりました。
なお、Asciiは名前からはアメリカ独自規格のようですが、安岡孝一・素子夫妻の著作によれば
規格制定にヨーロッパ諸国やソビエト、日本も参加したそうです。

ここで電気通信の歴史を振り返ってみます。

1800年、ボルタ電池が発明され安定的な直流電源が確保され、電気の実用化の道が開けた。
1833年にガウスとウェーバーは共同で最初の実用的な電信機を開発した。
1839年にはクックとホイートストンによる最初の商業的電信機が開発された。

1837年モールスはモールス式電信機を開発したが、それは数ある電信機のひとつでしたが、Vailにって
その信号方式は改良されて最初の標準の符号化方式となった。モールス信号を用いた電気通信は瞬く
間に発展した。

ヨーロッパではフランス・ドイツからヨーロッパ全域へ、更に遠くアジアまで伸びた。
北アメリカでは東部から南部、中部、そして太平洋岸へ、更に中南米へと伸びた。

海底ケーブルも1850年の英仏海峡を始め地中海、北海、バルト海、黒海などに張り巡らされた。
1857年には大西洋横断ケーブルが敷設されたが困難が大きく数日で途絶、最初の安定した大西洋横断
ケーブルは1866年である。インド洋やマラッカ海峡を経てまた別ルートはシベリアを経て極東の上海、
ウラジオストック、そして長崎までつながったのは1871年です。

中でも注目すべきはイギリスのケーブル網です。ケーブルによる電気通信は当然ながら経由国に
傍受される。あるいは暗号電文の取り扱い拒否などの事態も発生した。イギリスとインド植民地間の
通信も地中海経由ではフランスがスエズ運河の権益を持っていた関係などから、イギリスから大西洋
経由で南アフリカ、インド洋経由でインドに達しオーストラリアからカナダのバンクーバーと本国と
植民地だけでの世界一周通信網を完成させた。これが19世紀から20世紀前半までのイギリスの帝国
主義的世界支配を支えた。

当初は電気通信はモールス信号によっていたが、直接文字を送受信できる機構も研究され、単独の
電気通信事業者内や新聞社内では19世紀後半に徐々に実用化された。1874年にフランス人Baudotに
よるボー・コードを使った初期のテレタイプが設計された。

1905年にはMurrayがボー・コードを元にした改良コードにより通信士による符号の暗記が不要な
電信機を開発した。送信側では通信士は原稿を見てキーボードを打ち紙テープに記録した。
紙テープを送信機にかけると受信側の紙テープに穿孔されたが、初期の機械は送信側のテープと
受信側のテープのパターンは異なった。

紙テープは中央に紙送り用の穴があり、進行方向に向かって送り穴の右または左に信号用の穴を
あける。送り側では右の穴は信号ONの開始を意味し左側の穴はOFFを意味する。受け側はONである
ときに右に穴をあける。受信側ではテープを読み込んで自動化されたタイプライターが動く。
このコードは国際Telex網の標準コードとなった。
改良Murray Code
16進LTRSITA2Bell
0NULL
1E33
2LF(改行)
3A--
4SPACE
5S'BELL
6I88
7U77
8CR(復帰)
9DENQ$
0AR44
0BJBELL'
0CN,,
0DF保留域!
0EC::
0FK((
10T55
11Z+"
12L))
13W22
14H保留域STOP
15Y66
16P00
17Q11
18O99
19B??
1AG保留域&
1BFIGS(数字・記号)
1CM..
1DX//
1EV;;
1FLTRS(文字)
上の表の読み方を解説します。16進欄はコード値、LTRS欄はシフト解除の状態のときのコード値が
示す文字または制御記号、ITA2(International Telegraph Alphabet 2)欄はシフトされた状態の
ときの国際仕様、Bell欄はシフトされた状態のときのアメリカ仕様です。

改良Murray Codeは5ビットで32のコードポイントを26個のアルファベットと6個の制御コード・空白に
割り振った構造です。0x1bのFIGS記号と0x1fのLTRS記号が出現すると制御を切り替えます。
Murrayはアメリカとイギリスで特許を取った後、アメリカ特許をWestern Unionに売ったため
国際規格とアメリカ規格が別の発達を遂げたのでした。

0x1fのコードは「以降LTRSです」というコードでプリンタ動作を伴わず穿孔テープでいえば全ビット
穴あきのパターンなのでもしパンチミスした場合、間違ったコードを全ビット穴あきのパターンに書き
換えて後続をパンチする。その考え方はAsciiにも踏襲されている。なお、ENQは相手の素性を尋ねる
問いかけだそうです。

1927年になるとキーボード、プリンタ、紙テープパンチャー・リーダーを備えた量産型のテレタイプ
端末が開発され広く普及していった。

1937年、マサチューセッツ工科大学在学中のクロード・シャノンは電気通信史上最も重要な修士論文を
書き、その後、情報理論というに学問体系に発展させた。それは雑音の無い通信路での符号化理論と、
雑音がある伝送路での誤り訂正符号という概念を導入し、電気通信の基礎理論となった。

5ビットから7ビットへ、1963年に設定されたAsciiコードは大きな時代の進歩です。それは7ビット
符号系です。8ビット=1バイトが根本単位と思っている現代人にとって7ビットとはなんとも控え
目な規格です。しかし、その控えめさが後にAsciiを世界標準の最重要部分としたのです。
シャノンの誤り訂正理論を受け、8ビット中1バイトは誤り訂正に用いられたのでしょう。

テレタイプ端末も1960年代後半にはAsciiの記号系によるものが増えて行き、コンピュータ用の端末と
して使われるようになった。Ascii化される以前のテレタイプ端末も初期のコンピュータの入出力に
使われた。
△TOP

コンピュータの歴史とEBCDIC

現代のコンピュータの祖は1946年に稼動を開始したENIACといわれます。それは17468本の真空管、7200個の
ダイオードその他でできている。しかし、プログラムは結線の変更によって実現されていた。また、膨大な
数の真空管の平均故障間隔は短い。当初は弾道計算のために企画され、弾が着くより速く計算したという
逸話は有名ですが、その計画に気づいたマンハッタン計画の担当者が関与するようになり、現実には核兵器
開発のために使われたようです。

その後、最初のプログラム内蔵型コンピュータのEDVAC、そしてEDSACやSEACなどが作られ、ENIACもプログラム
内蔵方式に変更された。しかし第二次世界大戦の戦中~戦後~冷戦期のことであり、軍事機密や情報戦の
影に隠れていますがドイツでも研究が進んでいたようです。日本でも1950年ごろから試作機が作られている
背景にはそれ以前から研究の歴史があると考えられます。

アメリカでは1880年の国勢調査が人口の変動や調査項目の増加のため困難を極めていた。そのような問題を
解決したのがハーマン・ホレリスの開発したパンチカードによる集計機で、ホレリスの会社は20世紀にはいると
IBMとなり、政府機関や大企業で広く使われるようになった。

また拳銃などを作っていたレミントン社がタイプライターを作るようになり、20世紀には総合事務機器会社
レミントンランド社となりとなりパンチカード集計機も作っていたが、UNIVACを買収する。

コンピュータの草創期、汎用的な外部コードとして5ビットコードが使われていたが、1960年代にはAsciiと
EBCDICの7および8ビットコードが使われるようになってきた。

EBCDICはIBMが1964年4月7日に発表した汎用コンピュータSystem 360用に制定した8ビットコード系である。
EBCDICで数字の1は16進値F1となり、0xf1とあらわす。

現代でも利用されているが利用はほとんど汎用機に限られるため詳細はWikipediaのEBCDICの項を参照されたい。
◆WikipediaのEBCDIC
EBCDICコード表
Code..0..1..2..3..4..5..6..7..8..9..a..b..c..d..e..f
0..                
1..                
2..                
3..                
4..sp          .<(+ 
5..&           *); 
6..-/         ,%_>?
7..           #@ ="
8..                
9..                
a..                
b..                
c.. ABCDEFGHI      
d.. JKLMNOPQR      
e..  STUVWXYZ      
f..0123456789      
なぜEBCDICは汎用機にしか普及しなかったのか、それはコード表の文字の分布にある。
IBMが制定したオリジナルコードセットはその文字の分布が0x00~0xffの8ビット空間の全域に広がっている
ことである。コード表の先頭部、0x00~3fには制御コードが、0x40~7fのエリアの両端に記号類が、そして
0xc1~0xf9のエリアに英数字があり、空きエリアはばらばらです。

IBMの大型汎用コンピュータは巨額な開発費をかけた国際商品でした。アメリカ国内で売るときは小文字の
アルファベットを、フランスやドイツなどに売るときは独特の合字やアクセント記号を、日本に売るときは
カナを空きコード域に押し込み各国バージョンを作りましたが、入り組んだコード配置となりました。
日本語EBCDIC
 0123456789ABCDEF
0                
10                
20                
30                
40sp ¢.<(+
50&!$*);
60-/¦,%_>?
70:#@ ="
80abcdefghi
90jklmnopqr
A0stuvwxyz
B0        
C0{ABCDEFGHI      
D0}JKLMNOPQR      
E0¥ STUVWXYZ      
F00123456789      

Asciiでは基本的に7ビット系であるので拡張して8ビット版を作っも基本部と拡張部が明瞭に分けられる。
そうして0x80-0xffの領域を使ってフランス語版、ドイツ語版、日本語版などが作られた。
日本語対応したAsciiを見てみよう。
JIS X 0201 初版は1969年6月1日の制定
0123456789abcdef
0NULSHSXEXETEQAKBLBSHTLFHMCLCRSOSI
10EDD1D2D3D4NKSNEBCNEMSBEC
20 !"#$%&'()*+,-./
300123456789:; <=>?
40@ABCDEFGHIJKLMNO
50PQRSTUVWXYZ[]^_
60`abcdefghijklmno
70pqrstuvwxyz{|}~DEL
80                
90                
a0 
b0
c0
d0
e0                
f0                

JIS X 0201 の痛恨事、それは0x5cのコードがUS-Asciiでは"\"であるが、"¥"になっている事です。
0x7eも字形が一定ではなく、上付きであったりセンター寄せであったりする。
"\"の扱いなどどうでもいいと思うかもしれませんが、大変重要なコードです。
(1)エスケープシーケンスとして使われる。 例 改行:\n タブ:\t
(2)Windowsなどでディレクトリ区切り文字として使われる。
(3)日本円をあらわす通貨記号として使われる。

筆者の希望としては、日本円をあらわす通貨記号はUnicodeのU+ffe5に統一してほしい。

一方、1970年ごろになると集積回路技術が向上し、マイクロプロセッサというべきものが出現した。
最初は軍用の物が開発されたようですが、詳細は不明です。1971年になるとインテルやTI、
日本電気、シャープなどが初期的なマイクロプロセッサを開発した。
1972年になると8ビットマイクロプロセッサの時代が始まった。
インテル8008、改良型のi8080やZ80、またMC6800などが出て、やがてそれを使った回路キットが
発売され、更にApple Iなどが発売されパソコン時代が到来した。
△TOP

漢字のコード化

漢字のコード化の歴史は極めて原始的な物を別にすれば1950年ごろに始まりました。
最初は毎日新聞の紙テープに入力した漢字コードで動く活字鋳造組版機であるが、紙テープを電信で
送ることもできる。1955年には毎日、朝日、読売の3社がメーカーと組んで漢字テレタイプを開発
しましたが、文字コードは3社3様、同じ文字に対して穿孔パターンは全く異なります。

地方紙等は独力で開発する力が無かったのが幸いして、数社が文字コードの共通化に合意。CO-59と
命名された。産経新聞社や共同通信社も合流し、1935年には共同通信が加盟各紙に対してCO-59での
配信を開始し、先行した大手3紙以外は漢字コードが統一された。この規格は1977年に更新されCO-77と
なった。

コンピュータに目を向けると、1970年代、日本では外なる巨人IBMに対して通商産業省の主導の元、
大手の日立製作所、東芝、三菱電機と電電ファミリーといわれた富士通、日本電気、沖電気工業を
富士通+日立、東芝+日電、三菱+沖の3グループにまとめ、技術研究組合を作らせて補助金を
支給し、国産汎用コンピュータ産業の自立を図っていた。

コンピュータの漢字対応は1971年のIBM漢字システムが最初で、それは極めて柔軟な構成で、IBMの
技術力の高さをうかがい知る事ができるが、顧客の希望に応じて顧客独自バージョンの漢字コードを
提供することができた。

対抗すべく国内各社は富士通のJEF、NECのJIPS、日立のKEISが開発にしのぎを削る一方、漢字のコード
化には協力して取り組んだ。国内各社は教育漢字、当用漢字、人名用漢字、その他新聞、雑誌、出版物
などでよく使われる漢字からなどから漢字のコード化を進めた。

 教育漢字 小学校6年間のうちに学習することが文部科学省によって定められている漢字で
 現在は1006字。具体的には小学校学習指導要領の付録にある学年別漢字配当表による。

 当用漢字 1946年11月5日に国語審議会が答申し、同年11月16日に内閣が告示した
 「当用漢字表」に掲載された1850の漢字を指す。

 人名用漢字 日本の戸籍に子の名として記載できる文字は、原則として常用漢字と人名用漢字、
 片仮名及び平仮名(変体仮名を除く)、長音符、踊り字(「々」など)のみである(戸籍法施行規則)。
 (その後、何度かにわたって使用可能文字が増え、2008年12月8日の国籍法改正時に制限撤廃)

日本工業規格制定の伏線として、いくつかの漢字コードやコード案が作られました。
1969年の日本科学技術情報センターによるJICST漢字コード、1970年のFACOM 6801A漢字入力キーボード、
1971年の国立国会図書館によるNDL-70漢字コード、1971年の情報処理学会漢字コード委員会の
標準コード用漢字表などです。

漢字コードも日本工業規格として制定されました。日本工業規格を決めるのは主務大臣で1970年代で
いえば文部大臣、文化庁長官、通産大臣になり、各大臣は工業技術院にゆだねます。(現-産業技術
総合研究所)そこから財団法人日本規格協会などに依託されます。これは戦前の日本工業規格が軍需品
の調達を主目的としていたため、戦後、通産省から工業技術院に投げて、更に日本規格協会、更に
日本情報処理学会、その先の専門委員会と複雑な組織体制で作られていきます。

日本規格協会では、産業界・学界・官界から30人前後の委員を選んでJIS原案委員会を組織します。
産業界の委員はコンピュータ・メーカーや印刷・新聞・出版関係の方です。文部省、文化庁の方を
加え学会からは国立国語研究所の方1名のみだったそうです。(国語学者は不毛な論争に明け暮れて
いたとか)1978年にJIS(日本工業規格)C 6226が制定されました。(その後規格体系の見直しで名称を
JIS X 0208に変更)

JIS X 0208で規定された文字数は、非漢字453文字、漢字6349文字、合計6802文字です。
16区から47区が第一水準、48区から83区が第二水準ですがその後追加がありました。

それにはいくつかの欠陥が言われています。そのひとつが、先行する規格のJIS X 0201の上位互換に
なってなかったのです。Asciiの0x20~0x7eは何も考えずに新しいコード表の先頭に持ってきて
字形だけを全角文字にすれば良かったのです。

「"」など何文字かは対応が不明確で、「~」は上付きで表示されたり
センター寄せで表示されたりする不思議な字です。

更に「妛」や「彁」など康煕字典や諸橋大漢和辞典にも無い典拠不明文字がいくつかあります。
それは、選定委員が持ち込んだ生命保険の契約者名用の漢字に由来するといわれています。

また、恐らくJIS原案委員会にIBMが入ってなかったのではないかと思われます。
IBM漢字システムにあってJIS X 0208に無「IBM拡張文字」が混乱を引き起こします。
IBM拡張文字もJIS X 0208の2次規格に取り込んでおけばいいものを。
ISOの分科会でカナダ代表が追加を提案して国際規格として取り込まれましたが
JISに完全に取り込まれたかどうかは未確認です。Windowsの機種依存文字はIBM拡張漢字に端を発す。
(IBM拡張漢字等の取り込み状況は後日確認します。)

JIS X 0208は1983年の2次規格、1990年の3次規格、1997年の4次規格と進化してきた。
それらは、次のような略称で呼ばれる。次の内部に潜む94ビットの項参照。
JIS X 0208:1978 ・・・原規格(JIS C 6226)
JIS X 0208:1983 ・・・2次規格(1987.3.1 JIS C 6226よりJIS X 0208に名称変更)
JIS X 0208:1990 ・・・3次規格
JIS X 0208:1997 ・・・4次規格

2次規格では
 文字の追加 漢字4文字、記号39字、罫線素32、合計75文字
2次規格追加文字
02-2602-2702-2802-2902-30
02-3102-3202-3302-4202-43
02-4402-4502-4602-4702-48
02-6002-6102-6202-6302-64
02-6502-6602-6702-6802-69
02-7002-7102-7202-7302-74
02-8202-8302-8402-8502-86
02-8702-8802-8902-9408-01
08-0208-0308-0408-0508-06
08-0708-0808-0908-1008-11
08-1208-1308-1408-1508-16
08-1708-1808-1908-2008-21
08-2208-2308-2408-2508-26
08-2708-2808-2908-3008-31
08-3284-0184-0284-0384-04
また、このとき字体の変更が行われ、新旧JIS問題といわれる22文字の字体が入れ替えられた
22文字の字体入替
16-1982-45
18-0982-84
19-3473-58
19-4157-88
19-8667-62
20-3562-85
20-5075-61
23-5980-84
25-6066-72
28-4173-02
31-5780-55
33-0876-45
36-5952-68
37-5566-74
37-7859-77
37-8362-25
38-8677-78
39-7274-04
41-1659-56
47-2268-38
44-8973-14
43-8948-54
上記の変更は初期のパソコン用漢字プリンタの貧弱な仕様を意識したとか。
以下の字は1983年の追加の際に区点が移動した。
43-7445-5864-8622-38
以下の字は1990年の追加です。
84-0584-06
JIS X 0208の後続の規格は
JIS X 0212 1990年の補助漢字を規定した。
JIS X 0213 2000年制定、2004年改定
 これらが実用化されるのはUnicode時代になる。
△TOP

内部に潜む94進数・区点

人間は普通、10進数を使います。またコンピュータの内部処理の記述には16進数が便利です。
しかし、文字コード処理の世界では94進数、場合によれば96進数が使われているのです。
なぜ94なのか、96なのか。

Asciiは7ビットコードで128種類ある。そのうち0x00~0x1fのコントロールコードが32種類あり、
一般文字が96種類になります。その中に空白1種類と0x7fの位置に"DEL"のコントロールコードがある。
印刷可能文字が94種類です。これが94と96の由来です。これら印刷可能文字を代替コードとして
直接送れないバイナリデータをテキスト変換して送るやりかたもあります。

印刷可能文字は数字が10種類、アルファベット大文字、小文字各26種類で記号が32種類という計算で、
それらの文字集合は順序を持ち、0x00~0x7fの範囲では順序と文字コードは一致する。

JIS X 0208は94×94の区と点で表わされています。区点と言いますと写植や邦文タイプのような何か
古めかしい感じがしますが、94という数字はさきに見た7ビットコードからコントロールコードと
空白を引いたコードの数になります。事実古めかしい規格なのです。
区点文字 94系
12345678910
0!"#$%&'()*
10+,-./01234
2056789:; <=>
30?@ABCDEFGH
40IJKLMNOPQR
50STUVWXYZ[\
60]^_`abcdef
70ghijklmnop
80qrstuvwxyz
90{|}~      
16進区点表
12345678910
00123456789
10abcdef10111213
201415161718191a1b1c1d
301e1f2021222324252627
4028292a2b2c2d2e2f3031
5032333435363738393a3b
603c3d3e3f404142434445
70464748494a4b4c4d4e4f
8050515253545556575859
905a5b5c5d      

ISO/IEC 2022とJIS漢字コード

AsciiコードやJIS漢字コードはISO/IEC 2022という規格によってさまざまにコードページを切り替えます。
1973年に最初のバージョンが作られたISO/IEC 2022という規格は大変複雑で、抽象的な規格です。
0x00~0x1fをC0空間、0x20~0x7fをGL空間、0x80~0x9fをC1空間、0xa0~0xffをGR空間、
そのほかにG0~G3のバッファ空間を持つというまことに壮大な枠組みですが、理論のための理論という
気がしてならないですが、1970~80年代の伝送路では必要であったのでしょう。

ISO/IEC 2022は実用的には0x1bのエスケープコードとそれに続く登録簿に記載されたコードによって
コードページを切り替えます。
ISO/IEC 2022エスケープシーケンス
文字集合シーケンスバイト1バイト2
Ascii0x1b28420x0-7f 
JIS X 0208:19780x1b24400x21-7e0x21-7e
JIS X 0208:19830x1b24420x21-7e0x21-7e
JIS X 0208:19900x1b26401b24420x21-7e0x21-7e
JIS X 0212:19900x1b2428440x21-7e0x21-7e
JIS X 0213:2000-10x1b24284f0x21-7e0x21-7e
JIS X 0213:2000-20x1b2428500x21-7e0x21-7e
JIS X 0201:半角カナ0x1b28490x21-7e 
ひとつ決まりがあり、一連の情報の最初、どのようなエスケープシーケンスも出現する前はAsciiと解釈されます。
その後、0x1b2442というエスケープシーケンスが出現すればJIS X 0208:1983のJIS漢字コードになります。

次に改行が来るなら、コードページをAsciiに切り替えるため0x1b2842というエスケープシーケンスと
0x0c0aのコードを送ります。

区点 JIS 文字
01-01 2121 全角スペース
16-01 3021 亜
16-94 307E 蔭
17-01 3121 院

全角スペースと「亜」という漢字があるとします。
全角スペースの区点は01-01で94×94の仮想空間の先頭位置にマッピングされ、
第一バイトと第二バイトが0x21から始まる94個のGL空間にマッピングされ0x2121のコードになります。
最初の漢字「亜」という字は16区1点ですので区が示す第一バイトは「亜」より15だけ多く、第二バイトは
等しいので0x3021になります。
ISO/IEC 2002の詳細は◆文字コードの話などをご覧ください。

EUC

EUC(Extended Unix Code)はUNIX上でよく使われる文字コードの符号化方式です。

各国語向けバージョンがあり、JISコードを基にした日本語EUCの他に
韓国語EUC (EUC-KR)
簡体字中国語EUC (EUC-CN)
繁体字中国語EUC (EUC-TW)
西欧諸語対応のインターナショナル版などがあります。

日本語EUCは0x00~7fのAsciiコードと日本語コードを表しますが先に見たJISコードのように
ISO/IEC 2022に準拠した煩わしいエスケープシーケンスは使いません。
コード域の第一ビットがゼロならAscii、第一ビットが1なら日本語コードの第一バイトか第二バイトです。

日本語EUCは94×94の区点空間を0xa1から始まるGR空間にマッピングする。
区点01-01 全角スペースは0xa1a1になる。亜は0xb0a1です。
ただし、半角カナに限っては第一バイトに0x8eのシフトインコードを付けて
第二バイトはJIS X 0201 のコード値通り設定する。
Shift_Jisコード域表
0123456789abcdef
0                
10                
20                
30                
402222222222222222
502222222222222222
602222222222222222
70222222222222222
8012121212121212121212121212121212
9012121212121212121212121212121212
a02222222222222222
b02333333333333333
c03333333333333333
d03333333333333333
e01313131313131313131313131313133
f03333333333333   

SHIFT-JIS

上に書いたJIS漢字コードの実装は面倒なエスケープシーケンスを要し、取り扱いが面倒でバイト数も増えた。
マイクロソフトを中心とした技術者たちは新たな符号化を考えたが、JIS X 0201では0x00~7fをAsciiが、
0xA0~dfを半角カナが占めていて使用可能エリアは限られていた。そこでかなりトリッキーな符号化が
考案された。
このコード域表で、1または12とある場所は第一バイトが存在する場所です。(マイクロソフトMS932)
2、12、x2とある場所は第二バイトの場所です。
なお、X2とある場所は拡張コードの第一バイトが来ます。NEC 特殊文字、NEC 選定 IBM 拡張文字、
IBM 拡張文字が加えられている。
この中で注意を要する場所が0x7fで、欠番になっている。

JISの漢字は94区×94点で8836個のコードポイントを得ていたがSHIFT-JISでは第一バイトで47個、
第二バイトで188個のコードを使い8836個のコードポイントを得る。

第一バイトは7ビット分の情報量しか持っていない。区は1から始まるので、1区と2区のように連続する
奇数の区とそれより1つ多い偶数の区は第一バイト上、同じ値になる。そこで失われた1ビットの情報、
すなわち区の奇偶性によって第二バイトのコード値をシフトしている。

区点番号からShift-jisのコードを求めるロジック
《第一バイト値》
区番号から0:偶数か1:奇数の奇偶値を求める。
第一バイト値=(区番号+奇偶値)/2
区番号 > 62なら、第一バイト値に64を加える(0xa0~dfが飛び領域になっているため)

《第二バイト値》
奇偶値=1:奇数なら 第二バイト値=点番号+63 但し点番号が64以上なら第二バイト値=点番号+64
 0x7fが空き領域になっているため、点番号64以上の特殊処理が必要になります。

奇偶値=0:偶数なら 第二バイト値=点番号+158

上記のロジックで奇偶値=1:奇数の場合の先頭アドレスは64、0x40で最終アドレスは94点で158、0xb0
奇偶値=0:偶数の場合の先頭アドレスは159で0xb1、最終アドレスは94点で252、0xfcです。

第二世代の漢字と世界の文字コード

ここで世界に目を向けてさまざまな文字を見ていきましょう。
たとえばアメリカ、コンピュータ文明発祥の地であり、IBM、ゼロックス、ヒューレットパッカード、
AT&Tなどの巨大企業があり、また新たに興ったマイクロソフト、アップル、サンマイクロシステム、
グーグル、フェイスブックなどの会社も大企業の仲間入りしてきました。

ここまで何度も書いたAsciiはアメリカの標準規格で、また英語はフランス語やドイツ語のような
アクセント記号や合字も一般的な文章には使われません。普通の電子メールや文章用テキスト
ファイルもAsciiだけで書けてしまう便利さ。しかし、アメリカ人が改まった文章を書こうと
思ったらAsciiの文字だけでは足りなくなります。引用符もAsciiでは開き、閉じ兼用ですが
“ABC”のように開け閉め専用の引用符を使ったほうが見栄えがよくなります。

フランス語やドイツ語になればはなしは全く別次元になります。Asciiに無い文字を使わなければ
意味の通る文章を書けません。最初はAsciiの空いている所にカナを埋め込んだように、
その後各メーカーがカナが入った後の空き領域に罫線素やらトランプマークなど入れたように
各国語バージョンが作られていたと想像されます。
その後、下記のような西欧語対応のインターナショナル版が作られた。
(このごろは日本語Windowsでもエクセルに"CAFE"と入力したらなぜか"CAFÉ"に化けてしまいます。)
△TOP

各国の文字

ISO 8859-1

ISO 8859-1
Code..0..1..2..3..4..5..6..7..8..9..a..b..c..d..e..f
0..                
1..                
2..SP!"#$%&'()*+,-./
3..0123456789:;<=>?
4..@ABCDEFGHIJKLMNO
5..PQRSTUVWXYZ[\]^_
6..`abcdefghijklmno
7..pqrstuvwxyz{|}~ 
8..                
9..                
a..NBSP¡¢£¤¥¦§¨©ª«¬SHY®¯
b..°±²³´µ·¸¹º»¼½¾¿
c..ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ
d..ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß
e..àáâãäåæçèéêëìíîï
f..ðñòóôõö÷øùúûüýþÿ
0xa0のNBSPはその場所で改行を許さない特殊な空白です。SHYはソフトハイフンです。
8859には多数のバージョンがある。8859-1が西欧各国語対応であるが、フランス語の
対応が十分でないため8859-15で"oe"の合字などがサポートされた。
ISO 8859
Part 1Latin-1 西ヨーロッパ
Part 2Latin-2 中部ヨーロッパ
Part 3Latin-3 南ヨーロッパ
Part 4Latin-4 北ヨーロッパ
Part 5Latin/Cyrillic(ロシア)
Part 6Latin/アラビア
Part 7Latin/ギリシャ
Part 8Latin/ヘブライ
Part 9Latin-5 トルコ
Part 10Latin-6 ノルディック
Part 11Latin/タイ
Part 12デーヴァナーガリーを廃棄
Part 13Latin-7 バルト湾岸
Part 14Latin-8 ケルト
Part 15Latin-9 フランス語対応版
Part 16Latin-10 南西ヨーロッパ
各バージョンの詳細は次をご覧ください。 ▼ISO 8599文字コード表
上記の詳細は ftp://ftp.unicode.org/Public/MAPPINGS/ISO8859/

ヨーロッパ諸国やアジアの多民族国家では言語の混在も重要な問題です。
スイスではフランス語、ドイツ語、イタリア語など複数の公用語がある。
東ヨーロッパではユーゴスラビアの解体で見るように人種のるつぼ状態と想像される。
スリランカでは英語、シンハラ語、タミル語と3種類の文字で印刷され、
インドの紙幣はアルファベットと古代からの正統文字のデーバナーガリーや
タミル文字のほかおびただしい数の言語・文字で印刷されている。

ユニコードの時代と文字集合

そのような混沌の中から単一のコード系で世界の言語を表す文字集合・ユニコードが作られていった。
Unicodeは初期の段階から符号化文字集合の策定と文字の符号化方式の策定が別の物として開発が進められた。
Unicodeは1980年代にゼロックス社が提唱し、マイクロソフト、アップル、IBM、サン・マイクロシステムズ、
ヒューレット・パッカード、ジャストシステムなどが参加するユニコードコンソーシアムにより作られた。
(ジャストシステムは参加時期が遅く、その後退会。初期の段階から日本から日立、東芝クラスの
 会社が参加しなかったことは残念です。)

ISO 8859の1~16の各バージョンは複数の言語をカバーするので、それだけで日本・中国・台湾・朝鮮
以外の大部分をカバーする。

1980年代、複数の言語に対応する沢山のコードページを切り替える方式であったが、単一のコード系で
世界中の文字を表わすという理想の元に、16ビット65536文字の空間に文字集合を策定すべく作業を進めた。
やがて各国から自国の文字の追加要望が殺到し、1996年のVer2.0の段階で16ビット限界を超えてしまった。

ラテン語、ギリシャ語由来の言語の文字をはじめ、中東・イスラム圏、インド圏、東南アジア諸国、
更にはエジプトのヒエログリフやクレタ島の線形B文字、メソポタミアの楔形文字、甲骨文字や金文、
科学技術記号や携帯電話の絵文字も登録される。

その過程で、膨大な字数を持つ漢字およびハングルの扱いが問題になった。
漢字は古代、殷王朝の時代の甲骨文字、周王朝の時代の青銅器の文字や篆書、秦の時代の隷書を経て漢の時代に
楷書や行書、草書が生まれ、およそ今日の漢字の原型ができた。それらは誤用、俗用、地方ごとの分化などの
動きもあったが、書道や科挙などによって正しい字が守られる動きもあった。宋朝体や明代から清代にかけて
明朝体が発達した。

漢字は周辺諸国の日本や朝鮮、ベトナム、琉球などに移入され、国々で独自の変化も受けてきた。
やがて清王朝が滅び中華民国が成立し第二次世界大戦後毛沢東が率いる中国共産党が大陸での支配権を
確立し、中華民国を率いる蒋介石は1949年に台湾に逃れた。

そのような時代背景の中、中国本土では簡字体が公用の文字とされ、台湾・香港・マカオでは伝統的な繁体字が
用いられ、日本では漢字かな交じり文の文化が発達し、その後、漢字の簡略化の動きが見られた。

朝鮮でも李王朝時代や日本統治時代には宮廷や両班階級、行政には漢字が、民衆にはハングルが用いられた。
その後南北分裂を経て南北とも漢字が用いられることは少なくなった。南北朝鮮で独自に進化した漢字も
ユニコードによる国際化の舞台に持ち込まれた。

日本は日本、簡字体、繁体字で別のコード域を割り振る案を提案し、中国は日本体の簡字体も繁体字も
いっしょにする案を主張し、韓国は正しいハングルで使われる字は3000余りで字母は数十個にすぎないが
可能な組み合わせ全部11,172文字の登録を主張し1992年の全体投票で日本案は敗れたようです。

その結果、漢字は部首別に簡字体も繁体字も日本の字も一緒にされ日本人にとって非常に使いにくいものとなった。
これをCJK統一漢字という。

ユニコードの文字集合と符号

ユニコードは下の表に示す符号化文字集合を持つ。各文字のユニコード値をUCSといい、
現在はUCS-4という企画が使われている。(UCS:Universal multiple-octet coded Character Set)
それは128群256面256区256面で各要素はゼロから始まり約21.5億コードポイントを持つ。

Unicodeでは文字をあらわす符号位置(コードポイント)にUnicodeスカラ値という正の整数が
割り当てられていて、"U+"に続く16進値で表される。またUCS値と言う。
大域情報 1面が65536コードポイント
0面BMP基本多言語面
1面SMP補助多言語面
2面SIP補助漢字面
3面TIP古代漢字の割当予定
14面SSP補助特殊用途面
15~16面SPP補助私用領域
コード順ブロック一覧 blocks.txt
範囲名称日本語名称
U+0000-007FBasic Latin基本ラテン文字(ASCII互換)
U+0080-00FFLatin-1 Supplementラテン1補助
U+0100-017FLatin Extended-Aラテン文字拡張A
U+0180-024FLatin Extended-Bラテン文字拡張B
U+0250-02AFIPA ExtensionsIPA拡張(国際音声記号)
U+02B0-02FFSpacing Modifier Letters前進を伴う修飾文字
U+0300-036FCombining Diacritical Marksダイアクリティカルマーク(合成可能)
U+0370-03FFGreek and Copticギリシア文字及びコプト文字
U+0400-04FFCyrillicキリール文字(キリル文字)
U+0500-052FCyrillic Supplementキリール文字補助
U+0530-058FArmenianアルメニア文字
U+0590-05FFHebrewヘブライ文字
U+0600-06FFArabicアラビア文字
U+0700-074FSyriacシリア文字
U+0750-077FArabic Supplementアラビア文字補助
U+0780-07BFThaanaターナ文字
U+07C0-07FFNKoンコ文字
U+0800-083FSamaritanサマリア文字
U+0840-085FMandaicマンダ文字
U+08A0-08FFArabic Extended-Aアラビア文字拡張A
U+0900-097FDevanagariデーヴァナーガリー文字
U+0980-09FFBengaliベンガル文字
U+0A00-0A7FGurmukhiグルムキー文字
U+0A80-0AFFGujaratiグジャラート文字(グジャラーティー文字)
U+0B00-0B7FOriyaオリヤー文字
U+0B80-0BFFTamilタミル文字
U+0C00-0C7FTeluguテルグ文字
U+0C80-0CFFKannadaカンナダ文字
U+0D00-0D7FMalayalamマラヤーラム文字
U+0D80-0DFFSinhalaシンハラ文字
U+0E00-0E7FThaiタイ文字
U+0E80-0EFFLaoラオス文字(ラーオ文字)
U+0F00-0FFFTibetanチベット文字
U+1000-109FMyanmarミャンマー文字(ビルマ文字)
U+10A0-10FFGeorgianグルジア文字
U+1100-11FFHangul Jamoハングル字母
U+1200-137FEthiopicエチオピア文字(ゲエズ文字)
U+1380-139FEthiopic Supplementエチオピア文字補助
U+13A0-13FFCherokeeチェロキー文字
U+1400-167FUnified Canadian Aboriginal Syllabics統合カナダ先住民音節(カナダ先住民文字)
U+1680-169FOghamオガム文字
U+16A0-16FFRunicルーン文字
U+1700-171FTagalogタガログ文字(バイバイン)
U+1720-173FHanunooハヌノオ文字
U+1740-175FBuhidブヒッド文字
U+1760-177FTagbanwaタグバヌア文字(タグバヌワ文字)
U+1780-17FFKhmerクメール文字
U+1800-18AFMongolianモンゴル文字
U+18B0-18FFUnified Canadian Aboriginal Syllabics Extended統合カナダ先住民音節拡張
U+1900-194FLimbuリンブ文字
U+1950-197FTai Leタイ・ロ文字
U+1980-19DFNew Tai Lue新タイ・ロ文字(西双版納タイ文字)
U+19E0-19FFKhmer Symbolsクメール文字用記号
U+1A00-1A1FBugineseブギス文字(ロンタラ文字)
U+1A20-1AAFTai Thamラーンナー文字
U+1B00-1B7FBalineseバリ文字
U+1B80-1BBFSundaneseスンダ文字
U+1BC0-1BFFBatakバタク文字
U+1C00-1C4FLepchaレプチャ文字
U+1C50-1C7FOl Chikiオル・チキ文字
U+1CC0-1CCFSundanese Supplementスンダ文字補助
U+1CD0-1CFFVedic Extensionsヴェーダ文字拡張
U+1D00-1D7FPhonetic Extensions音声記号拡張
U+1D80-1DBFPhonetic Extensions Supplement音声記号拡張補助
U+1DC0-1DFFCombining Diacritical Marks Supplementダイアクリティカルマーク補助(合成可能)補助
U+1E00-1EFFLatin Extended Additionalラテン文字拡張追加
U+1F00-1FFFGreek Extendedギリシア文字拡張
U+2000-206FGeneral Punctuation一般句読点
U+2070-209FSuperscripts and Subscripts上付き・下付き
U+20A0-20CFCurrency Symbols通貨記号
U+20D0-20FFCombining Diacritical Marks for Symbols記号用ダイアクリティカルマーク(合成可能)
U+2100-214FLetterlike Symbols文字様記号
U+2150-218FNumber Forms数字に準じるもの
U+2190-21FFArrows矢印
U+2200-22FFMathematical Operators数学記号
U+2300-23FFMiscellaneous Technicalその他の技術用記号
U+2400-243FControl Pictures制御機能用記号
U+2440-245FOptical Character Recognition光学的文字認識、OCR
U+2460-24FFEnclosed Alphanumerics囲み英数字
U+2500-257FBox Drawing罫線素片
U+2580-259FBlock Elementsブロック要素
U+25A0-25FFGeometric Shapes幾何学模様
U+2600-26FFMiscellaneous Symbolsその他の記号
U+2700-27BFDingbats装飾記号
U+27C0-27EFMiscellaneous Mathematical Symbols-Aその他の数学記号A
U+27F0-27FFSupplemental Arrows-A補助矢印A
U+2800-28FFBraille Patterns点字図形
U+2900-297FSupplemental Arrows-B補助矢印B
U+2980-29FFMiscellaneous Mathematical Symbols-Bその他の数学記号B
U+2A00-2AFFSupplemental Mathematical Operators補助数学記号
U+2B00-2BFFMiscellaneous Symbols and Arrowsその他の記号及び矢印
U+2C00-2C5FGlagoliticグラゴル文字
U+2C60-2C7FLatin Extended-Cラテン文字拡張C
U+2C80-2CFFCopticコプト文字
U+2D00-2D2FGeorgian Supplementグルジア文字補助
U+2D30-2D7FTifinaghティフナグ文字
U+2D80-2DDFEthiopic Extendedエチオピア文字拡張
U+2DE0-2DFFCyrillic Extended-Aキリール文字拡張A
U+2E00-2E7FSupplemental Punctuation補助句読点
U+2E80-2EFFCJK Radicals SupplementCJK部首補助
U+2F00-2FDFKangxi Radicals康熙部首
U+2FF0-2FFFIdeographic Description Characters漢字構成記述文字、IDC
U+3000-303FCJK Symbols and PunctuationCJKの記号及び句読点
U+3040-309FHiragana平仮名
U+30A0-30FFKatakana片仮名
U+3100-312FBopomofo注音字母(注音符号)
U+3130-318FHangul Compatibility Jamoハングル互換字母
U+3190-319FKanbun漢文用記号(返り点)
U+31A0-31BFBopomofo Extended注音字母拡張
U+31C0-31EFCJK StrokesCJKの筆画
U+31F0-31FFKatakana Phonetic Extensions片仮名拡張
U+3200-32FFEnclosed CJK Letters and Months囲みCJK文字・月
U+3300-33FFCJK CompatibilityCJK互換用文字
U+3400-4DBFCJK Unified Ideographs Extension ACJK統合漢字拡張A
U+4DC0-4DFFYijing Hexagram Symbols易経記号(六十四卦)
U+4E00-9FFFCJK Unified IdeographsCJK統合漢字
U+A000-A48FYi Syllablesイ文字(ロロ文字)
U+A490-A4CFYi Radicalsイ文字部首
U+A4D0-A4FFLisuリス文字
U+A500-A63FVaiヴァイ文字
U+A640-A69FCyrillic Extended-Bキリール文字拡張B
U+A6A0-A6FFBamumバムン文字
U+A700-A71FModifier Tone Letters声調修飾文字
U+A720-A7FFLatin Extended-Dラテン文字拡張D
U+A800-A82FSyloti Nagriシロティ・ナグリ文字
U+A830-A83FCommon Indic Number Forms共通インド数字に準じるもの
U+A840-A87FPhags-paパスパ文字
U+A880-A8DFSaurashtraサウラーシュトラ文字
U+A8E0-A8FFDevanagari Extendedデーヴァナーガリー文字拡張
U+A900-A92FKayah Liカヤー文字
U+A930-A95FRejangレジャン文字
U+A960-A97FHangul Jamo Extended-Aハングル字母拡張A
U+A980-A9DFJavaneseジャワ文字
U+AA00-AA5FChamチャム文字
U+AA60-AA7FMyanmar Extended-Aミャンマー文字拡張A
U+AA80-AADFTai Vietタイ・ヴェト文字
U+AAE0-AAFFMeetei Mayek Extensionsマニプリ文字拡張
U+AB00-AB2FEthiopic Extended-Aエチオピア文字拡張A
U+ABC0-ABFFMeetei Mayekマニプリ文字
U+AC00-D7AFHangul Syllablesハングル音節文字
U+D7B0-D7FFHangul Jamo Extended-Bハングル字母拡張B
U+D800-DB7FHigh Surrogates上位代用符号位置
U+DB80-DBFFHigh Private Use Surrogates上位私用代用符号位置
U+DC00-DFFFLow Surrogates下位代用符号位置
U+E000-F8FFPrivate Use Area私用領域(外字領域)
U+F900-FAFFCJK Compatibility IdeographsCJK互換漢字
U+FB00-FB4FAlphabetic Presentation Formsアルファベット表示形
U+FB50-FDFFArabic Presentation Forms-Aアラビア表示形A
U+FE00-FE0FVariation Selectors字形選択子(異体字セレクタ)
U+FE10-FE1FVertical Forms縦書き形
U+FE20-FE2FCombining Half Marks半記号(合成可能)
U+FE30-FE4FCJK Compatibility FormsCJK互換形
U+FE50-FE6FSmall Form Variants小字形
U+FE70-FEFFArabic Presentation Forms-Bアラビア表示形B
U+FF00-FFEFHalfwidth and Fullwidth Forms半角・全角形
U+FFF0-FFFFSpecials特殊用途文字
U+10000-1007FLinear B Syllabary線文字B音節文字
U+10080-100FFLinear B Ideograms線文字B表意文字
U+10100-1013FAegean Numbersエーゲ数字
U+10140-1018FAncient Greek Numbers古代ギリシア数字
U+10190-101CFAncient Symbols古代記号
U+101D0-101FFPhaistos Discファイストスの円盤の文字
U+10280-1029FLycianリキア文字
U+102A0-102DFCarianカリア文字
U+10300-1032FOld Italic古代イタリア文字(古イタリア文字)
U+10330-1034FGothicゴート文字
U+10380-1039FUgariticウガリト文字(ウガリット文字)
U+103A0-103DFOld Persian古代ペルシャ文字
U+10400-1044FDeseretデザレット文字
U+10450-1047FShavianシェイヴィアン文字
U+10480-104AFOsmanyaオスマニア文字
U+10800-1083FCypriot Syllabaryキプロス音節文字
U+10840-1085FImperial Aramaicアラム文字
U+10900-1091FPhoenicianフェニキア文字
U+10920-1093FLydianリディア文字
U+10980-1099FMeroitic Hieroglyphsメロエ記念碑書体
U+109A0-109FFMeroitic Cursiveメロエ草書体
U+10A00-10A5FKharoshthiカローシュティー文字
U+10A60-10A7FOld South Arabian南アラビア文字
U+10B00-10B3FAvestanアヴェスター文字
U+10B40-10B5FInscriptional Parthianパルティア文字
U+10B60-10B7FInscriptional Pahlaviパフラヴィー文字
U+10C00-10C4FOld Turkic突厥文字
U+10E60-10E7FRumi Numeral Symbolsルーミー数字
U+11000-1107FBrahmiブラーフミー文字
U+11080-110CFKaithiカイティ文字
U+110D0-110FFSora Sompengソラ・ソンペン文字
U+11100-1114FChakmaチャクマ文字
U+11180-111DFSharadaシャラダ文字
U+11680-116CFTakriタクリ文字
U+12000-123FFCuneiform楔形文字
U+12400-1247FCuneiform Numbers and Punctuation楔形文字の数字及び句読点
U+13000-1342FEgyptian Hieroglyphsエジプト・ヒエログリフ
U+16800-16A3FBamum Supplementバムン文字補助
U+16F00-16F9FMiaoポラード文字
U+1B000-1B0FFKana Supplement仮名文字補助
U+1D000-1D0FFByzantine Musical Symbolsビザンチン音楽記号
U+1D100-1D1FFMusical Symbols音楽記号
U+1D200-1D24FAncient Greek Musical Notation古代ギリシア音符記号
U+1D300-1D35FTai Xuan Jing Symbols太玄経記号
U+1D360-1D37FCounting Rod Numerals算木用数字
U+1D400-1D7FFMathematical Alphanumeric Symbols数学用英数字記号
U+1EE00-1EEFFArabic Mathematical Alphabetic Symbolsアラビア数学用文字記号
U+1F000-1F02FMahjong Tiles麻雀牌
U+1F030-1F09FDomino Tilesドミノ牌
U+1F0A0-1F0FFPlaying Cardsトランプ
U+1F100-1F1FFEnclosed Alphanumeric Supplement囲み英数字補助
U+1F200-1F2FFEnclosed Ideographic Supplement囲み表意文字補助
U+1F300-1F5FFMiscellaneous Symbols And Pictographsその他の記号及び絵文字
U+1F600-1F64FEmoticons顔文字
U+1F680-1F6FFTransport And Map Symbols交通及び地図の記号
U+1F700-1F77FAlchemical Symbols錬金術記号
U+20000-2A6DFCJK Unified Ideographs Extension BCJK統合漢字拡張B
U+2A700-2B73FCJK Unified Ideographs Extension CCJK統合漢字拡張C
U+2B740-2B81FCJK Unified Ideographs Extension DCJK統合漢字拡張D
U+2F800-2FA1FCJK Compatibility Ideographs SupplementCJK互換漢字補助
U+E0000-E007FTagsタグ
U+E0100-E01EFVariation Selectors Supplement字形選択子補助
U+F0000-FFFFFSupplementary Private Use Area-A補助私用領域A
U+100000-10FFFFSupplementary Private Use Area-B補助私用領域B
from ftp://ftp.unicode.org/Public/UCD/latest/ucd/Blocks.txt
△TOP

ユニコードの符号化式

ユニコードは文字集合を策定するという行為とは独立して文字集合を符号化する
いくつかの方式があります。

UTF-8

UTF-8は1バイト~6バイトの可変長コード化方式です。
現実には5~6バイトの符号化は近い将来考えられない。
U+00~U+7fのUs-Asciiの領域が1バイトでコード化されるという利点を持つが
漢字など大部分のコードが3バイトでコード化される事が難点である。

UTF-8ではある1バイトを見れば、そのバイトがシーケンス上に占める場所がわかる。

ビットパターン X:0または1の任意の組み合わせ
0XXXXXXX 1バイトコードである。
10XXXXXX 多バイトコードの後続バイトである
110XXXXX 2バイトコードの先頭バイトである
1110XXXX 3バイトコードの先頭バイトである
11110XXX 4バイトコードの先頭バイトである
111110XX 5バイトコードの先頭バイトである
1111110X 6バイトコードの先頭バイトである
1111111X 未定義
UTF-8の符号化
データ範囲コード化長第1バイト第2バイト第3バイト第4バイト第5バイト第6バイト
0x0~0x7f1バイト0xxxxxxx     
0x80~0x7ff2バイト110xxxxx10xxxxxx    
0x800~0xffff3バイト1110xxxx10xxxxxx10xxxxxx   
0x10000~0x1fffff4バイト11110xxx10xxxxxx10xxxxxx10xxxxxx  
0x200000~0x3ffffff5バイト111110xx10xxxxxx10xxxxxx10xxxxxx10xxxxxx 
0x4000000~0x7fffffff6バイト1111110x10xxxxxx10xxxxxx10xxxxxx10xxxxxx10xxxxxx

UTF-16

UTF-16ではUCS値がU+10000未満の場合、2バイトコード、U+10000以上なら4バイトコードになります。

2バイトコードの場合、UCS値=UTF-16値になります。
ただし、U+d800~U+dfffはサロゲートエリアとして保留されていて、文字コードに割り当てられることはありません。

4バイトコードに変換する場合、USC値を10ビット値2つに分解します。
簡単に書けば1024で割った商と剰余に分けます。(1024は2の10乗です)
上位2バイトは0xd800+商、下位2バイトは0xdc0+剰余になります。

エンディアンとBOM

ところで、UTF-16には3種類あります。
(1)BOMで始まりビッグエンディアン
(2)BOMで始まりリトルエンディアン
(3)BOMで始まらずビッグエンディアン

そこでBOMとエンディアンについて説明します。
BOMはbyte order mark で、それは0xfeffという値を各エンディアンで設定した値で、
ずばり書けばビッグエンディアンなら0x0eff、リトルエンディアンなら0xfffeです。
大きい値で終わればビッグエンディアン、小さい値で終わればリトルエンディアンです。

エンディアンは計算機の構造を表す言葉です。
さきに書いたように、0xfeffというのが符号なし整数値だとしたら
それを0xfeffとメモリーに格納するやり方はIBM、モトローラMC68000系、サンマイクロシステムのSPARC、
それにJava Virtual Machine はこの流儀に従い、ビッグエンディアンです。
他方、インテルのX86系やDECのVAXなどは0xfffeとメモリーに格納し、リトルエンディアンです。

UTF-32

UTF-32はUnicodeスカラ値とUTF-32のコード値は常に等しくなる。
現在、コード配置が予定されている領域は0面から16面までであり、
21ビットで全て表すことができる。また将来においてもそれ以上に
拡張されることはないとされている。

次の世代の漢字と文字コード


CJK統一漢字は一字一字由来を明らかにし、漢字をユニコードに登録する際、繁体字、簡字体、日本書体、朝鮮書体が混合され、同一字形の物は
同一文字と見なされるようになった。簡字体と日本書体は似ても似つかないものが多いが、画数の
少ない文字においては差は無くなっていく。これをCJK統一漢字という。

また、日本国内においても膨大な数の異字体由が存在する。明治以降戸籍簿や不動産登記簿や
商業登記簿などの公文書に記載された漢字には提出者の誤字、書き癖、担当の役人の誤認、書写ミスなど
膨大な数の字が存在する。住民基本台帳ネットワーク統一文字19432字、戸籍統一文字55267字、
登記統一文字65597字といわれています。

そのような異字体に対応する仕組としてUnicode IVS/IVDがあり、Windows8では利用可能である。

戸籍や登記簿などの情報は維持しないといけないが、書き間違いに由来する文字は正しい字は何であり、
どのような経緯で登録されているかの由来をはっきりさせ、異字体一覧に加え利用可能にするることが
妥当でしょう。そして、異字体研究が煮詰まり意見の集約を見たものは戸籍法等を改正し、正しい字に
集約させてほしい。
▼外部リンク
参考文献
文字符号の歴史 欧米と日本編 安岡 孝一/安岡 素子/著 共立出版 ISBN 4-320-12102-3 
文字コード「超」研究 深沢 千尋/著 出版者 ラトルズ 2011.7 ISBN 4-89977-293-4 
Unicode IVS IVD入門 JIS規格の歴史、異体字問題の解説から、Windows 8での対応方法まで
   田丸 健三郎/小林 龍生/著 日経BP社 2013.3 ISBN 4-8222-9483-0 
★index  TOP

inserted by FC2 system