東アジアの文字集合概要: 韓国語

Cultures/Korea/Hangul-Internetも参考になる。

(1999-02-26 追記) Jungshik Shin 氏の FAQの方がいいかも。 韓国語だが, 文字コード専門委員会関連資料 は大変参考になる。

ほかの東アジア諸国にない韓国語だけの文字といえばいうまでもなくハングルです。 ハングル1文字は Jamo(字母) 2個または 3個を組み合わせて構成されています。 たとえば「hangul」なら「h」「a」「n」「g」「u」「l」の 6つの字母を 音節ごとに「han」「gul」の 2文字にまとめて表記します。

理論的に可能なすべての文字を別々にあらわすには, 初声(音節頭子音)19 x 中声(母音)21 x 終声(音節末子音)(27 + 1) = 11,172字が必要となります。 (現在使われなくなった古ハングルの文字をあわせるとさらに字数が増えます)

なお, 日本や中国と異なり, 韓国語は分かち書きします。


1.KS X 1001(KS C 5601) 完成型

KS X 1001 は現在もっとも普通に使われている韓国語文字集合です。 この文字集合は従来「KS C 5601」の名前で知られてきましたが, KS C 56xx-58xx の番号不足を解消するため, 1997年8月20日に KS X へ番号を振り直すことを決定したそうです。 上記の文字コード専門委員会関連資料の中に番号振り直しについての説明があります。
JDK や Unicode Consortium のマッピングテーブルをはじめとして, 現在も KS C 5601 の名前から切り替わっていないものが多いので注意。

ISO には ISO-IR-149 として登録されています。

この文字集合では, 通常ハングル 1文字にひとつのコードを割り当てます。 この方式を Wansung(完成)型と呼びます。 ただし理論的に可能なすべてのハングルを含んでいるのではなく, 実際に使われる頻度の高い 2,350 字 (=25x94) のみを収めています。 外来語などを表すためにはこれでは不足することがあるそうで, そのために別に Johab(組合)型という方式も決められています(後述)。

8bit 環境では ASCII と区別するために MSB を立てます(EUC-KR)。 以下, この項でコードが書いてあるときはすべて EUC-KR だと思ってください。

ハングル以外に, KS X 1001 には漢字も 4,888 (=52x94)字定義されていますが, その定義のされようはずいぶんと風変わりです。 読みのハングル順に並んでいるのですが, しばしば 1つの字に複数のコードを割り振ってあります。 たとえば「金」という字は人名とか地名だとキム, それ以外はクムのように発音するので 「クム」の場所 (D0DD) と「キム」の場所 (D1D1) の二個所に「金」が出てくる, kwi, ku, kyun の 3音ある「龜」の場合は CFCF, D0A2, D0B8 の 3箇所に定義されている, といった具合です。 重複の一番多いのは「樂」(nak, rak, ak, yo)で, 4箇所に定義されています。 発音からコード表を検索しやすいとか, 実際の発音にあわせておけばハングル順ソートに便利だとか, それなりの意味がないわけではないのでしょうが, 画面に「金」という字がいくつかでてきたとして, それが同じ字なのかどうかわからない, というのはやっぱりコード体系としておかしいのではないかと思いますね。 このような重複字 268 字を除くと KS X 1001 中の漢字は 4,620 字となります。

コードはおおむね下のように割り振られています。

A1A1-A2FE 記号
A3A1-A3FE KS X 1003 (旧 KS C 5636, 1バイト文字)と同じ物
A4A1-A4FE ハングルの字母
A5A1-A5AA ローマ数字(小文字)
A5B0-A5B9 ローマ数字(大文字)
A5C1-A5F8 ギリシャ文字
A6A1-A9FE 記号
AAA1-AAF3 平仮名
ABA1-ABF6 片仮名
ACA1-ACFE キリル文字
B0A1-C8FE ハングル
CAA1-FDFE 漢字

KS X 1003 (旧 KS C 5636) というのは日本の JIS X 0201 ラテン文字とそっくりで, ただ円記号のかわりにウォン記号がはいっています。

2.ISO-2022-KR

7bit 環境では G0 に ASCII, G1 に KS X 1001 を割り当て, SO/SI で切り替えます。 各行末では ASCII に戻しておきます。 初めて KS が現れる場合はその前にエスケープシーケンス「ESC $ ) C」を置きますが, ISO-2022-JP と異なり, エスケープシーケンスは SO が現れる前に最低 1度出現すればよく, かつ行頭で指定しなければならないようです。 詳細は RFC1557 を参照してください。

3.UHC

UHC は KS X 1001 にハングルを追加して, 11,172 文字全部を表そうとしたものです。 Microsoft Windows95 で採用されています。 これだけの字数は 94x94 の領域には納まらないので, シフトJIS に似たコード体系にして, KS X 1001 にないハングルを増えた領域に 端からつめてほうり込んであります。 GBK の兄弟といってもいいでしょう。 漢字は増やしていません。

1バイトめ 2バイトめ 最大字数 実際の字数
KS X 1001 A1-FE (94) A1-FE (94) 94x94 = 8,836 8,224
UHC 81-FE (126) 41-5A,61-7A,81-FE (178) 126x178 = 22,428 17,046

2バイトめに 40,5B-60,7B-7E の範囲の文字を使っていないのは, 日本のシフトJIS でよく起こる問題 (DOS で 2バイトめが 5C の文字がパスの区切りとみなされて云々) が起きないように配慮したものでしょう。

4. KS X 1001 組合型

KS X 1001 完成型 2,350 字でハングルが不足する場合のために用意されている文字集合で, こちらは 1文字を構成する 3部分それぞれに 1 から 29 まで(5bit) の番号をつけ, 5bit x 3 = 15bit それにおまけの 1bit を加えた 16bit ですべてのハングルをあらわすことができます。 Wansung(完成)型に対してこちらは Johab(組合)型と呼ばれます。 その構成は先頭(MSB)から:

となっています。 初声・中声・終声のそれぞれには, 以下のようにコードが割り振られています。

番号初声終声中声
1- (ゼロ終声) -
2k k -
3kkkk a
4n ks ae
5t n ya
6ttnc yae
7r nh eo
8m t -
9p l -
10pplk e
11s lm yeo
12sslp ye
13(ゼロ)ls o
14c lth wa
15cclph wae
16chlh -
17khm -
18th- oe
19php yo
20h ps u
21- s weo
22- ss we
23- ng wi
24- c -
25- ch -
26- kh yu
27- th eu
28- ph yi
29- h i

たとえば「han」ならば h = 20 (10100) a = 3 (00011) n = 5 (00101) なので,
1 10100 00011 00101 = D065
となります。 8bit*2 の文字コードとしてみると, 1バイトめが 88-D3, 2バイトめが 41-FD (一部不連続)の範囲に収まっています。

5. KPS 9566-97

(1999-03-07 追記)
朝鮮民主主義人民共和国の規格だそうだそうです。 ISO-IR-202 として登録されています。

KS X 1001 に非常によく似ていますが, ローマ数字の代わりにロシヤ文字がはいっていたり, 重出文字を除いてそのかわりにハングルの数を少し増したりしています。


文字コードの話に戻る