日本語・日本語文化学類2班,1996年11月18日

漢字コード

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります(1行で打つこと)。
http://www.hlla.is.tsukuba.ac.jp/~yas//classes/ipe/nitiniti2-enshu-1996/1996-11-11/ kanji-code.html

あるいは、次のページから手繰っていくこともできます。 http://www.hlla.is.tsukuba.ac.jp/~yas//classes/ipe
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
http://www.ipe.tsukuba.ac.jp/~yshinjo

■漢字コード

コンピュータで扱うことができるのは、数(2進数)だけです。日本語も英語 も全て数に置き換えられてコンピュータの中に保存されます。日本語がどのよ うにしてコンピュータの中や通信回線上で表現されているのかを知っていると 便利でしょう。すると、電子メールで受け取った文書をワープロに取り込んだ り、電子メールの「文字化け」の原因を追及したり、修復したりすることがで きます。

■ビットとバイト

コンピュータが扱える情報の最小単位は、ビット(bit)です。1ビットでは、 0か1の2つのことしか区別できません。2つだけでは、文字や数を表わすの に不足するので、普通は、複数のビットをまとめて使うことになります。現在 の多くのコンピュータでは、複数のビットをまとめる場合、最小の単位として 8ビットを単位として1バイト(byte)よ呼んで使っています。1バイト(8 ビット)では、2の8乗、つまり、256種類のものを区別することができま す。(32ビットのコンピュータとは、一度に32ビットずつ計算をすること ができるコンピュータです。)

2進数を表現するのには、0と1だけで十分です。しかし、直接2進数を書く と、長くなりすぎるので、代りに16進数が使われます。16進数では、0〜 9、A〜Fで数を表現します。次の表は、2進数で 01000000 から01010000が 16 進数では、40 から 50 に相当することを表わしています。

----------------------------------------------------------------------
2進	 16進	10進
----------------------------------------------------------------------
01000000 40	64
01000001 41     65
01000010 42	66
01000011 43	67
01000100 44	68
01000101 45	69
01000110 46	70
01000111 46	71
01001000 48	72
01001001 49	73
01001010 4A	74
01001011 4B	75
01001100 4C	76
01001101 4D	77
01001110 4E	78
01001111 4F	79
01010000 50	80
----------------------------------------------------------------------

■文字セット

文字セットとは、利用する文字を明確に限定したものです。コンピュータとは 関係ない文字セットとしては、「常用漢字」があります。「ひらがなだけ」や 「カタカナだけ」もまた、文字セットです。よく使われている文字セットには、 次のようなものがあります。

ASCII は、アルファベット(大文字小文字)、数字、いくつかの記号 (!”#$%&’()+,−./:;<=>?@[/]^_` {|}〜)を含んだ94文字の印刷可能な文字からなる文字セットです。ASCII とJISローマ字は、ほとんど同じです。違いは、ASCIIで「」 となっている所がJISローマ字では「」に、ASCIIの 「」がJISローマ字の「」になっている所 です。

「半角カナ」は、カタカナと濁点など(。「」、・゛゜ー) 63文字を含む文字セットです。ANK は、JISローマ字と半角かなをあわせた 文字セットです。以前漢字が扱えないパソコンでも、この ANK だけはなんと か扱えたという時代がありました。

JIS C 6226-1978 から JIS X 0208-1990 は、漢字を含む日本語表記のための 文字セットです。これらの JIS では、94×94(それぞれ区と点と呼ばれる) の空間に、漢字、アルファベット、数字、記号、ギリシャ文字、ロシア文字な どを定義しています。 最新の JIS X 0208-1990 では、この規格には、漢字は、第1水準として29 65文字、第2水準として3390文字が含まれています。

これらのJIS規格では、「区番号」と「点番号」を用いて文字を表現していま す。区番号と点番号は、1から94(10進)の数字です。区がX軸、点がY 軸と思うと、94×94の2次元の表が作られます。そのどこかに漢字やひら がなやギリシャ文字などが位置付けられています。たとえば、「漢」は、20 区33点に位置つけられています。このJISに定義されている区と点を用いて 漢字を差し示す番号を「区点番号」とか「区点コード」ということがあります。 最近の漢和辞典には、JIS規格の漢字の区番号と点番号が示されています。区 と点は、「2033」のように普通の10進数のようにも見えますが、本来は「20区 33点」と、それぞれ独立した数字です。

Latin1 (ISO 8859 第1部) は、ASCII にドイツ語やフランス語を表記するため に必要なアルファベットや、ウムラウトやアクセント記号がついたアルファベッ トを加えた文字セットです。

■符号(code)

JIS X 0208 文字セットは、コンピュータで扱う漢字の範囲(文字セット)を 決めたものです。コンピュータで扱うためには、それらを数で「表現」する必 要があります。この数のことを、符号(code)、数に変換することを符号化する (encoding)するといいます。

コンピュータで文字を表わすには、独自の符号の方法を用いてもかまいません。 しかし、プログラムごとに独自の方法で符号化していると、プログラムの間で データを交換をすることができません。そこで、以下で述べるような標準的な 対応表が使われています。

◆ASCII(アスキー)

英語のアルファベット(大文字、小文字)や数字や記号などの文字を符号化す るために、現在もっともよく使われている対応表は、ASCII(American Standard Code for Information Interchange)です。英語の電子メールもワー プロの文書も、ほとんどが ASCII を使っています。(IBM系の大型コンピュー タでは、EBCDIC という独自の対応表が使われています。IBMでもパソコン では、ASCII です。)

ASCII というと、符号化の方向ですが、文字セットを意味することもあります。 文字セットでは、ASCIIのうち印刷可能な94文字を意味します。ASCII では、 印刷可能な文字以外に、印刷できない制御文字も定義しています。

ASCII では、7ビットで文字を表現しています。つまり、10進では0から128, 16進では 0 から 7F までです。以下に、16進による ASCII コード表を示しま す。

ASCII コード表 
+---------------------------------------------------------------+
| 00 NUL| 01 SOH| 02 STX| 03 ETX| 04 EOT| 05 ENQ| 06 ACK| 07 BEL|
| 08 BS | 09 HT | 0A NL | 0B VT | 0C NP | 0D CR | 0E SO | 0F SI |
| 10 DLE| 11 DC1| 12 DC2| 13 DC3| 14 DC4| 15 NAK| 16 SYN| 17 ETB|
| 18 CAN| 19 EM | 1A SUB| 1B ESC| 1C FS | 1D GS | 1E RS | 1F US |
| 20 SP | 21  ! | 22  " | 23  # | 24  $ | 25  % | 26  & | 27  ' |
| 28  ( | 29  ) | 2A  * | 2B  + | 2C  , | 2D  - | 2E  . | 2F  / |
| 30  0 | 31  1 | 32  2 | 33  3 | 34  4 | 35  5 | 36  6 | 37  7 |
| 38  8 | 39  9 | 3A  : | 3B  ; | 3C  < | 3D  = | 3E  > | 3F  ? |
| 40  @ | 41  A | 42  B | 43  C | 44  D | 45  E | 46  F | 47  G |
| 48  H | 49  I | 4A  J | 4B  K | 4C  L | 4D  M | 4E  N | 4F  O |
| 50  P | 51  Q | 52  R | 53  S | 54  T | 55  U | 56  V | 57  W |
| 58  X | 59  Y | 5A  Z | 5B  [ | 5C  \ | 5D  ] | 5E  ^ | 5F  _ |
| 60  ` | 61  a | 62  b | 63  c | 64  d | 65  e | 66  f | 67  g |
| 68  h | 69  i | 6A  j | 6B  k | 6C  l | 6D  m | 6E  n | 6F  o |
| 70  p | 71  q | 72  r | 73  s | 74  t | 75  u | 76  v | 77  w |
| 78  x | 79  y | 7A  z | 7B  { | 7C  | | 7D  } | 7E  ~ | 7F DEL|
+---------------------------------------------------------------+

たとえば、「ABC」という3文字は、コンピュータの内部では、41 42 43 (16 進)と表現されています。「123」という3文字は、31 32 33 (16進)と表現さ れています。このように、文字と数字は違います。「1」という文字が数値と しは16進で 31 (10進では48) と表現されます。

上の ASCII コード表で、16進で 00 から 1F と 7F は、普通の文字ではあり ません。これらは、制御文字(control character,制御コード)と呼ばれている ものです。制御文字は、通信速度の制御に使ったり、行末を表わしたり文字を 消したりするのに使われます。キーボードで、Control-A と打つと、制御文字 を打ったことになります。重要な制御文字をいくつかあげておきます。

0D (CR, Carriage Return)
復帰(リターン)
0A (NL, New Line)
改行
09 (HT, Horizontal Tab)
水平タブ
08 (BS, Back Space)
後退
1B (ESC, Escape)
エスケープ
7F (DEL, Delete)
削除

◆ANKの符号

ASCII は、16進 00 から 7F (印刷できるものでは、21から7E)を使うものです。 これに半角カナをA1 から DF に埋め込み符号化する方法が、初期の日本のパ ソコンでよく使われました。

◆JIS符号

JIS文字セットでは、扱う文字の範囲を決めたものです。文字は、区番号と点 番号で区別されていました。これを、実際のコンピュータで扱うためには、数 に対応させる必要があります。文字を数に対応させることを、「符号化」とい います。

JIS文字セットを符号化するには、制御文字(エスケープ・シーケンス(Escape Sequence))を使って文字セットを切り替える方法が使われています。つまり、 漢字コードを送る前に、「漢字文字セットを使うという制御文字」を送り、 ASCII 文字コードを送る前に、「ASCII文字セットを使うという制御文字」を 送るという方法です。よく使われている制御文字には、次のようなものがあり ます。

ESC $ @ [1B 24 64]
以後、JIS C 6266-1987文字セットを使う。
ESC $ B [1B 24 66]
以後、JIS X 0208-1983文字セットを使う。
ESC ( J [1B 40 74]
以後、JISローマ字文字セットを使う。
ESC ( B [1B 40 66]
以後、ASCII文字セットを使う。

JIS C 6266-1987文字セット、または、JIS X 0208-1983文字セットを使うとい う制御文字の後には、次のような漢字コードを続けます。

区番号+20(16進) 点番号+20(16進)
この数を、JIS漢字コードといいます。

たとえば、「ABC漢字DEF」という文字列をJISで符号化することを考えます。 漢字では、JIS X 0208-1983文字セット、アルファベットにはASCII文字セット を使うことにします。すると、次のようになります。

31 32 33  1B 24 42 34 41 3B 7A  1B 40 66 34 35 36
1  2  3  ESC  $  B 漢    字    ESC  (  J  D  E  F

JIS符号化では、最初はASCIIであると仮定しているので、まず、「ABC」の ASCIIコードをそのまま来ます。次に、「JIS X 0208-1983文字セットを使う」 という制御文字が続きます。そして、「漢」「字」のJIS漢字コードが続きま す。再びASCIIの文字にもどすために、今度は、「ASCII文字セットを使う」と いう制御文字が来ます。最後に、「DEF」のASCIIコードが並びます。JISでは、 全ての数字が 00-7F の間に入ります。つまり、80 以上の数は使われていませ ん。これは、7ビットのコード体系の1つです。

JIS漢字コードは、電子メールを送る時に、使われます。ここで使われている 文字セットの切り替えの制御文字(エスケープ・シーケンス)は、国際標準で ある ISO-2022 に従ったものです。ISO-2022 には、日本語の他に、様々な言 語の文字セットに切り替えるためのエスケープ・シーケンスが定められていま す。ですから、JIS符号化のことを、ISO-2022-JP ということがあります。ま た、ISO-2022 に従っているということは、様々な言語を1つの文書の中で混 在させて使うことができる可能性があるということを示しています。

◆EUC(Extended UNIX Code)

EUC は、UNIXワークステーションでよく使われている符号化の方法です。本来 は、非常に複雑で3バイトで1文字を表わすことも可能な符号化ですが、実際 には、漢字を2バイトで表わす「EUC圧縮フォーマット」のことを差している ことが多いです。

「EUC圧縮フォーマット」では、1バイトから3バイトで1文字を表わします。 普通は、1バイトでASCII,2バイトで漢字を表わします。3バイトのものは、ほ とんど使われていません。

たとえば、「ABC漢字DEF」という文字列をJISで符号化することを考えます。 漢字では、JIS X 0208-1983文字セット、アルファベットにはASCII文字セット を使うことにします。すると、次のようになります。

31 32 33 B4 C1 BB FA 34 35 36
A  B  C  漢    字    D  E  F
EUC では、「ABC」,「DEF」の ASCII で定義されている文字は、そのまま ASCII コードで表現されます。漢字の部分は、JIS コードに 80 (16進)を加え たものを置きます。エスケープ・シーケンスがない所に特徴があります。また、 16進で 80 を超えている数が使われています。これは、8ビットの符号である という意味です。

◆シフトJIS(Shift-JIS, SJIS,Microsoft Kanji Code)

シフトJISコードは、マイクロソフト社が開発した符号化の方法です。シフト JISコードでは、ANK コード(ASCIIと半角カナを合わせたもの)を基本にして、 そこで空いている部分に漢字を埋め込んでいます。シフトJISは、MS-DOS, MS-Windows, Macintosh などのパソコンでよく使われています。

たとえば、「ABC漢字DEF」という文字列をシフトJISで符号化することを考え ます。漢字では、JIS X 0208-1983文字セット、アルファベットにはASCII文字 セットを使うことにします。すると、次のようになります。

31 32 33 8A BF 8E 9A 34 35 36
A  B  C  漢    字    D  E  F
シフトJISコードでは、「ABC」,「DEF」の ASCII で定義されている文字は、 そのまま ASCII コードで表現されます。漢字の部分は、JISコードから複雑な 計算式で決定されます。EUC と同じく、エスケープ・シーケンスがない所に特 徴があります。また、16進で 80 を超えている数が使われています。これは、 8ビットの符号であるという意味です。

シフトJISコードでは、扱える文字数に限りがあります。JISコードやEUCコー ドでは、拡張の余地が多いに残されています。

■漢字コードの変換

もともと同じ日本語の文字セット(JIS X 0208)を表現するのに、現在、JIS, EUC, Shift-JIS という3種類の符号化の方法が使われています。もともと同 じ文字セットですので、それらの間では相互変換をすることができます。

◆UNIX上での漢字コード変換(mnews)

電子メールやネットワーク・ニュースは、JISコードで送る必要があります。 普段は、mnews が自動的に漢字コードをJISにして送り出してくれているので、 気にする必要はありません。

◆UNIX上での漢字コード変換(ng)

UNIX (コマンドモード)では、エディタ ng が JIS, EUC, Shift-JIS のいずれ の符号化も自動的に認識して、表示してくれます。保存する時にの漢字コード は、C-x C-k f を押すたびに、変化していきます。どの漢字コード で保存するかは、ng の下から2行目の白黒反転した行に表示されています。

図1 ng で保存する漢字コードを変える(C-x C-k f)

図1 ng で保存する漢字コードを変える(C-x C-k f)

ここで、アルファベットは、次のような意味です。
S
Shift-JIS
J
JIS
E
EUC
-
未設定
N
無変換

◆UNIX上での漢字コード変換(nkf)

UNIX (コマンドモード)で、nkf というコマンド(プログラム) を使って漢字コードを変えることもできます。

% nkf -s ファイル名1 > ファイル名2 [←]

これで、ファイル名1 の内容が ファイル 名2にコピーされますが、その時、漢字コードが Shift-JIS に変ります。 nkf -s の代りに、nkf -jで JIS に、 nkf -e で EUC に変ります。

ここで注意することは、ファイル名1ファイル名2を必ず 別のものにすることです。同じものにすると、ファイルの内容が完全に無くな ります。

◆Macintosh上での漢字コード変換

Macintosh では、Shift-JIS が使われています。普通は、電子メールの文書を Shift-JIS へ変換できれば、十分です。それには、Netscape が使えます。変 換したいファイルのアイコンを、Netscape のアイコンへドラッグします。そ して、Netscape で表示します。きちんと表示された画面で、必要な部分をド ラッグし、Edit メニューから Copy (Command-C) を選びます。次に、ワープ ロ(Solo Writer)などの画面で、ペーストを行います。


[11月18日] [Mac copy&paste]
Last updated: 2001/02/08 23:15:07
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>