[1] [DFN[KS C 5601]] は[[大韓民国]]の[[符号化文字集合]]規格です。
1974年に初版が制定されました。1997年には規格番号が
[[KS X 1001]] に変更されています。

* 規格の版

[REFS[

- [55] 
[CITE@ko[국가표준 상세 | e나라 표준인증]], [TIME[2024-11-15T05:27:03.000Z]] <https://standard.go.kr/KSCI/standardIntro/getStandardSearchView.do?ksNo=KSX1001>

]REFS]


- [56] [DFN[KS C 5601‐1974]]
-- [64] [TIME[1974-09-27]] 제정 ([[制定]])
-- [71] >>55 で閲覧可能 19ページ [TIME[2024-11-15T05:40:13.300Z]]
- [57] [DFN[KS C 5601‐1982]] 
-- [29] [CITE[Code for Information Interchange (Hangul and Chinese Character)]]
-- [10] この版まで、 [[ISO/IEC 646の版]] (現在の [[KS X 1003]]) と [[Nバイトハングル]] (現在の附属書4) だけを規定
--- [28] 後者のみと説明されることがあるが、おそらく[[ハングル]]符号としてはという意味。
>>56 には [[ISO/IEC 646の版]]も含まれているので、 >>57 にもあったろう。
-- [30] 16ビット符号はこの版から附属書として追加
--- [31] ということはその意味でも >>28 は不正確で、本体では、と留保しなければならない。
あるいは >>56 ではということに。
- [58] '''KS C 5601‐1987'''
-- [34] この版から[[完成形]]が本体に。
-- [40] [[ISO/IEC 646の版]]は削除 ([[KS X 1003]] に分離)
-- [77] [[Nバイトハングル]]は本体から附属書に。
-- [11] [TIME[[L[1987.7.][1987-07]]]] 付規格原案
--- [27] 
[CITE[Wayback Machine]], [TIME[2025-06-17T14:38:49.000Z]] <https://web.archive.org/web/20190301013402/http://125.60.48.13/home4/dl_files/edu/001/IM1199204807.pdf>
- [59] '''KS C 5601‐1989'''
- [60] '''KS C 5601‐1992'''
-- [78] 16ビット符号から現行[[組合型]]に変更 (非互換)
- [54] ?
-- [65] [TIME[1997-08-20]] 개정 ([[改定]])
--- [69] >>55 エラーで閲覧不可 [TIME[2024-11-15T05:33:26.400Z]]
- [61] '''KS X 1001:1998'''
-- [66] [TIME[1998-12-31]] [[改定]]
--- [70] >>55 エラーで閲覧不可 [TIME[2024-11-15T05:33:26.400Z]]
- [62] '''KS X 1001:2002'''
-- [67] [TIME[2002-12-30]] [[改定]]
-- [72] >>55 で閲覧可能 64ページ
- [63] [DFN[KS X 1001:2004]]
-- [68] [TIME[2004-12-28]] [[改定]]
--- [53] >>55 で2014年版が閲覧可能 46ページ (途中ページがエラーメッセージの入った文書になっている、符号表なし) [TIME[2024-11-15T05:42:34.500Z]]
-- [49] [TIME[2009-12-29]] 확인 ([[確認]])
--- [73] >>55 エラーで閲覧不可 [TIME[2024-11-15T05:42:50.200Z]]
-- [50] [TIME[2014-12-17]] [[確認]]
--- [74] >>55 で2009年版が閲覧可能 116ページ [TIME[2024-11-15T05:44:41.100Z]]
-- [51] [TIME[2019-12-27]] [[確認]]
--- [75] >>55 で2019年版が閲覧可能 116ページ [TIME[2024-11-15T05:44:41.100Z]]
-- [52] [TIME[2024-10-30]] [[確認]]
--- [76] >>55 で2004年版が閲覧可能 116ページ [TIME[2024-11-15T05:44:41.100Z]]


* 符号化文字集合

[32] 
歴代 [[KS X 1001]] は多数の[[符号化文字集合]]を規定しています。
[[KS X 1001:2004]] 解説によれば各版に次の内容が含まれていました。

[FIG(table)[

:r: 版
:7r:7ビットローマ字
:7h:7ビットハングル
:7hr:7ビットハングル+ローマ字 (SI/SO)
:8hr:8ビットハングル+ローマ字
:c:7ビット制御文字
:ebcdic:EBCDIC
:16j:(旧) 16ビット組合型
:johab:(新) 組合型
:942: 94[SUP[2]] 完成型

:r: 1974
:7r:本体
:7h:本体
:7hr:本体
:8hr:本体
:c:附属書1

:r: 1982
:c:本体, 附属書2
:7r:本体
:7h:本体
:7hr:本体
:8hr:附属書1
:ebcdic:附属書1
:16j:附属書1

:r: 1987
:942: 本体 [VAR[F]] = [N[3/1]]
:16j:附属書3
:7h:附属書4
:7hr:附属書4

:r: 1989
:942: 本体 [VAR[F]] = [N[4/3]]
:16j:附属書3
:7h:附属書4
:7hr:附属書4

:r: 1992
:942: 本体 [VAR[F]] = [N[4/3]]
:johab:附属書3
:7h:附属書4
:7hr:附属書4

:r: 1998
:942: 本体 (+2字) [VAR[F]] = [N[4/3]]
:johab:附属書3
:7h:附属書4
:7hr:附属書4

:r: 2002
:942: 本体 (+2字+1字) [VAR[F]] = [N[4/3]]
:johab:附属書3
:7h:附属書4
:7hr:附属書4

:r: 2004
:942: 本体 (+2字+1字) [VAR[F]] = [N[4/3]]
:johab:附属書3
:7h:附属書4
:7hr:附属書4

]FIG]


* 完成型符号化文字集合

[2] '''[RUBYB[完成][Wansung]]型''':
1987年版以後の規格本体で規定されています。
[[ハングル]]の[[結合]]済み[[音節]] ([[現代ハングル]]の主要なもののみ。)
が含まれる 94[SUP[2]] の[[符号化図形文字集合]]
([[JIS X 0208]] 型文字集合) です。

** 文字集合

[3]
符号化文字集合:
= 1区 記号
= 2区 記号 (69文字)
= 3区 [[KS X 1001]] 相当の[Q[[[全角]]]]文字
= 4区 [[ハングル字母]]
= 5区 [[羅馬数字]], [[希臘文字]] (合計68文字)
= 6区 [[罫線素辺]] (68文字)
= 7区 記号 (79文字)
= 8区 発音記号, 丸付き文字など (合計91文字)
= 9区 発音記号, 括弧付き文字など
= 10区 [[平仮名]] (83文字)
= 11区 [[片仮名]] (86文字)
= 12区 [[キリル文字]] (66文字)
= 16区1点〜40区94点 [[ハングル音節]] (2350文字)
= 41区 [[私用域]] [SRC[>>18]]
= 42区1点〜93区94点 [[漢字]] (合計4888文字、
重複分268文字、実質4620文字)
= 94区 [[私用域]] [SRC[>>18]]

(1987年版〜1997年版は同じ符号化文字集合)

1998年版で2文字追加されました。
= 2区70点 [CODE(char)[[[U+20AC]]]]
= 2区71点 [CODE(char)[[[U+00AE]]]]

2002年版で1文字追加されました。
= 韓国郵便記号

[4] 1987年版規格票 (英語) によれば、
文字集合は次のように分類されているそうです [SRC[出典不詳]]。
= Special Character (432文字)
= Digit (30文字)
= An Element of Hangul Alphabet (94文字)
= Roman Character (52文字)
= Greek Character (48文字)
= Fragment of Line (68文字)
= Hangul (2350文字)
= Chinese Character (4888文字)
= Latin Character (27文字)
= Japanese Character (169文字)
= Russian characters [INS[(ママ)]] (66文字)

(合計 8224文字)

[REFS[
- [18] [CITE[Microsoft Word - KOREAWRD.DOC - KOREAPRN.PDF]], [TIME[1999-05-27T12:00:00.000Z]], [TIME[2022-05-03T07:02:35.886Z]] <http://www2.phys.canterbury.ac.nz/dept/docs/manuals/unix/DEC_5.0a_Docs/ACRO_SUP/KOREAPRN.PDF#page=12>
]REFS]

[5] '''漢字集合''':
[[漢字]]は発音順 (当然[[韓国語]]の[[ハングル]]の順序) で整列されています。
発音が複数ある文字は[[重複符号化]]されています。同じ字が
4つもあったりするのが藁えます [WEAK[(藁えばいいというものでもありませんが)]]。

[25] 
[[KS X 1004:2004]] 本体4によると次の[[ダイアクリティカルマーク]]は前置型
[SEE[ [[non-spacing文字]] ]]

- 1区7点
- 2区5点 〜 2区13点
- 3区62点, 3区64点, 3区94点

[38] 
[[KS X 1001]] は[[非漢字]]非[[ハングル]]に名前を与えています。
[[ISO/IEC 10646]] の[[文字の名前]]とは違う[[韓国語]]の名前です。

[41] 
[CITE[00000001.PDF - 149.pdf]], [TIME[2022-11-02T03:16:23.000Z]], [TIME[2022-12-10T06:08:22.048Z]] <https://itscj.ipsj.or.jp/ir/149.pdf>


*** 2002年の拡張

[13] KS X 1001:2002 でまた文字が追加されたそうです。2区72点に新しく出来た[[韓国]]の[[郵便マーク]] (○の中に〒の一番上の一が○になった文字 [WEAK[(ハングル)]])

[14] >>13 の情報源は [[JTC1/SC2/WG2]] N 2565 で、韓国 JTC1/SC2 の人の文章。

[15] ''misc/55341: Adding ko_KR.CP949 locale'' <http://lists.freebsd.org/pipermail/freebsd-bugs/2003-August/002657.html> : [[CP949]] の実装だけど、 [[GR]] 部分が KS X 1001:2002 と書いてあって、実際 [CODE[SPECIAL]]  に新しい [CODE[0xA2E8]] も含まれている。でもまだ Windoze では使えない ([[Unicode]] に入ってないから) のでは。で、いずれ Unicode に入ったとして、 [[M$]] は ANSI codepage にもこの文字追加するかな? どうかな?
[TIME[2003-10-04 22:29:50 +00:00]]

[16] 
郵便記号が [[UCS]] に入りました。

[CODE(char)[[[U+327E]]]] [CODE(charname)[[[CIRCLED HANDUL IEUNGU]]]]

([[ISO/IEC 10646]]:2003 Amendment 1:2004 / [[Unicode 4.1]])

*** 西紀2004年版規格

- [47] 
[CITE@ja[「緊」の「又」を「攵」に作る漢字 | yasuokaの日記 | スラド]], [TIME[2024-01-24T08:47:51.000Z]] <https://srad.jp/~yasuoka/journal/604275>
- [48] 
[CITE@ja[KS X 1001で重複している262組530字 | yasuokaの日記 | スラド]], [TIME[2024-01-24T08:48:53.000Z]] <https://srad.jp/~yasuoka/journal/604451>

*** 漢字字形

[SEE[ [[K字形]] ]]

*** 外字

[23] 
[[KS X 1001:2004]] 附属書2によると、
41区が[[外字]]領域A、
94区が[[外字]]領域Bです.
(本体4にも言及あり)


[24] 
[[KS X 1001:2004]] 本体4によると、
含まれない[[ハングル音節]]は、
“채움”、
[[初声]]、
[[中声]]、
[[終声]]の順に記述します。

[42] 
[[ISO-IR]]
でも41区と94区は[[外字]]とされています。
ただし局所的に使うことは認められても、
[[情報交換]]で使うことは禁止されていました。
[SRC[>>41]]

[87] 
[CITE[Encoding Standard]] の [[EUC-KR]]
は[[外字]]に対応しておらず、
[CC[U+FFFD]]
に置き換えるなどエラーとして扱ってしまいます。

** 符号化表現

[6] '''符号拡張法''':
1987年版は [[ISO-IR]] の149番で登録されています。
[[終端バイト]]には [CODE(char)[4/3]] ([SAMP(char)[C]])
が割当てられています。

すなわち、 [[ISO/IEC 2022]] [[符号拡張法]]の環境下で使う[[指示シーケンス]]は、
:[[G0]] に[[指示]]:[CODE(char)[1/11]] ([CODE(char)[[[ESC]]]]) [CODE(char)[2/4]] ([SAMP(char)[$]]) [CODE(char)[2/8]] ([SAMP(char)[(]]) [CODE(char)[4/3]] ([SAMP(char)[C]])
:[[G1]] に[[指示]]:[CODE(char)[1/11]] ([CODE(char)[[[ESC]]]]) [CODE(char)[2/4]] ([SAMP(char)[$]]) [CODE(char)[2/9]] ([SAMP(char)[)]]) [CODE(char)[4/3]] ([SAMP(char)[C]])
:[[G2]] に[[指示]]:[CODE(char)[1/11]] ([CODE(char)[[[ESC]]]]) [CODE(char)[2/4]] ([SAMP(char)[$]]) [CODE(char)[2/10]] ([SAMP(char)[*]]) [CODE(char)[4/3]] ([SAMP(char)[C]])
:[[G3]] に[[指示]]:[CODE(char)[1/11]] ([CODE(char)[[[ESC]]]]) [CODE(char)[2/4]] ([SAMP(char)[$]]) [CODE(char)[2/11]] ([SAMP(char)[+]]) [CODE(char)[4/3]] ([SAMP(char)[C]])

[33] 
[[ISO-IR]] に登録される前の[TIME[西暦1987年][1987]]版[[規格]]は[[私用終端バイト]] 
[CODE(char)[3/1]] ([SAMP(char)[1]])
を使うとしていました。
次の[TIME[西暦1989年][1989]]版[[規格]]で正式に登録された [N[4/3]]
に改められました。
[SRC[[[KS X 1001:2004]] 解説2]]

[35] 
[TIME[西暦1998年][1998]]版規格で2文字、
[TIME[西暦2002年][2002]]版規格で1文字追加されたにも関わらず、
[[終端バイト]]は変更されていません
(本来は仕様違反)。
[[KS X 1001:2004]] 解説5によると[TIME[西暦2004年][2004]]規格改正時に課題となったものの、
現在までそのまま放置されています。

-*-*-

[19] 
[[KS X 1001:2004]] は [[ISO/IEC 2022]] に基づく利用方法を定義しています。

- [20] [[ISO/IEC 2022]] [[7ビット符号]]
-- [[G1]], [[G2]], [[G3]] のいずれかに[[指示]] ([[終端バイト]] [N[4/3]])
-- [[固定シフト]]で[[左側]]に[[呼び出し]]
- [21] [[ISO/IEC 2022]] [[8ビット符号]]
-- [[G1]], [[G2]], [[G3]] のいずれかに[[指示]] ([[終端バイト]] [N[4/3]])
-- [[固定シフト]]で[[右側]]に[[呼び出し]]
-- デフォルトで[[エスケープシーケンス]]なしで利用可能

;; [22] [[G0]] に[[指示]]する方法を示していない点に注意。


[SEE[ [[EUC-KR]], [[DEC Korean]], [[Shift-KS]] ]]

** Unicode との対応

[43] [[CJK互換漢字]]

[44] >>43 初期と2文字の変更あり

[45] [CITE@ja[ノート:u827c-k - GlyphWiki]], [TIME[2023-08-11T14:11:55.000Z]] <https://glyphwiki.org/wiki/Talk:u827c-k>

[46] >>45
[[出典K]]の字形は [[KS X 1001]] と違う形に変わっていたりするらしい。


* 組合型符号化文字集合

[7] [[KS X 1001]] の附属書3は[RUBYB[組合][Johab]]型の[[符号化文字集合]]を規定しています。
この符号化文字集合は[Q[組合型]], [Q[johab]], [Q[Hangul johab]],
[Q[組合せ型コード]], [Q[two‐byte johab]], [Q[tbj]] などと呼ばれています。 

この符号化文字集合では、[[ハングル音節]]1文字が通常[[ハングル字母]]
3文字分の組合せで構成されることを利用し、
機械的に[[現代ハングル]]の全組合せを16ビット空間内に割当ています。

[8] [[ハングル]]は最上位ビットが常に [CODE[1]] で、
以後5ビットずつ[[初声]], [[中声]], [[終声]]と符号化します。

,#,初声,終声,中声
,1,,(零),
,2,k,k,
,3,kk,kk,a
,4,n,ks,ae
,5,t,n,ya
,6,tt,nc,yae
,7,r,nh,eo
,8,m,t,
,9,p,l,
,10,pp,lk,e
,11,s,lm,yeo
,12,ss,lp,ye
,13,(零),ls,o
,14,c,lth,wa
,15,cc,lph,wae
,16,ch,lh,
,17,kh,m,
,18,th,,oe
,19,ph,p,yo
,20,h,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

(空欄はなし)

8ビットの2バイト符号化文字集合としてみると、次のようになります。
:第1バイト:[CODE(char)[0x84]]〜[CODE(char)[0xD3]]
:第2バイト:[CODE(char)[0x41]]〜[CODE(char)[0x7E]], 
[CODE(char)[0x81]]〜[CODE(char)[0xFE]]
(正確には、 [CODE(char)[0x41]]〜[CODE(char)[0x51]], 
[CODE(char)[0x53]]〜[CODE(char)[9x5D]], 
[CODE(char)[0x61]]〜[CODE(char)[0x71]], 
[CODE(char)[0x73]]〜[CODE(char)[0x7D]], 
[CODE(char)[0x81]]〜[CODE(char)[0x91]], 
[CODE(char)[0x93]]〜[CODE(char)[0x9D]], 
[CODE(char)[0xA1]]〜[CODE(char)[0xB1]], 
[CODE(char)[0xB3]]〜[CODE(char)[0xBD]], 
[CODE(char)[0xC1]]〜[CODE(char)[0xD1]], 
[CODE(char)[0xD3]]〜[CODE(char)[0xDD]], 
[CODE(char)[0xE1]]〜[CODE(char)[0xF1]], 
[CODE(char)[0xF3]]〜[CODE(char)[0xFD]])

[9] ハングル以外:
-記号・漢字
:第1バイト:[CODE(char)[0xD8]]〜[CODE(char)[0xDE]],
[CODE(char)[0xE0]]〜[CODE(char)[0xF9]]
:第2バイト:[CODE(char)[0x31]]〜[CODE(char)[0x7E]], 
[CODE(char)[0x91]]〜[CODE(char)[0xFE]]

- [[私用域]]
:第1バイト:[CODE(char)[0xD8]]
:第2バイト:[CODE(char)[0x31]]〜[CODE(char)[0x7E]], 
[CODE(char)[0x91]]〜[CODE(char)[0xFE]]

[26] 
[[ハングル]]以外は[[組合型]]と同じ[[文字集合]]。

** エスケープシーケンス

[SEE[ [[ANSIエスケープシーケンス]] ]]

[SEE[ [[DOCS]] ]]

** 比較


[79] 
[[Johab]] の実装の中には、
[CITE[ICU]]
の
[DFN[[CODE[glibc-JOHAB-2.3.3]]]]
のように [N[0x5C]] を [CC[U+20A9]]
とするものと、
[CITE[ICU]]
の
[DFN[[CODE[java-Johab-1.3_P]]]],
[DFN[[CODE[windows-1361-2000]]]]
のように 
[CC[U+005C]] 
とするものがあります。

** 実装


[84] [CITE@en[88939 - Korean JOHAB encoding <-> Unicode converter]], [TIME[2025-11-17T08:26:05.000Z]] <https://bugzilla.mozilla.org/show_bug.cgi?id=88939>

[85] [CITE@en[80111 - johab converter should not include ASCII]], [TIME[2025-11-17T08:26:55.000Z]] <https://bugzilla.mozilla.org/show_bug.cgi?id=80111>

[86] [CITE@en[71489 - RFE: JOHAB <-> Unicode converter for Korean locale]], [TIME[2025-11-17T08:29:31.000Z]] <https://bugzilla.mozilla.org/show_bug.cgi?id=71489>

[80] 
[CITE@ja[add charset prober for Johab Korean (!1) · マージリクエスト · uchardet / uchardet · GitLab]], [TIME[2025-10-26T12:45:11.000Z]] <https://gitlab.freedesktop.org/uchardet/uchardet/-/merge_requests/1>


** 人工的な利用例


[83] [CITE[Korean Language (Johab)]], [TIME[2025-10-28T13:53:51.000Z]] <https://charsetplus.tripod.com/HTMLs/Korean/Korea_Johab.htm>



** 歴史

[12] 2009年10月には [[ASCII]] [[バイト列]]の解釈が[[組合型]]と [[ASCII]]
では異なることがあるとして、 [[HTML5]] で利用する[['''べきではない''']]と規定されました。

;; [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-10-28 07:06:16 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=4366&to=4367>

* N‐バイト・ハングル符号化文字集合

[SEE[ [[N‐バイト・ハングル符号化文字集合]] ]]

* 関連

[36] [[KS X 1002]],
[[KS X 1003]]

[37] 
[[Adobe-KR]]

* 歴史

[17] [CITE@en[Bug 16947 – Consider adding U+327E to the Korean index]]
([TIME[2015-05-13 19:16:11 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=16947>

[39] 
[CITE@ja[利用者-会話:bright - GlyphWiki]], [TIME[2024-11-15T05:21:47.000Z]] <https://glyphwiki.org/wiki/User-talk:bright>


[81] [CITE[Code Conversion Tools]], [TIME[2025-10-27T07:40:30.000Z]] <https://zsigri.tripod.com/fontboard/cjk/convert.html>

[82] >>81 配布ファイルより

>
[PRE[
CHAMEL rewrites a hangul text, dBASE II, or III file to a different
hangul code scheme.  Check options for covered hangul code schemes.
]PRE]

>
[PRE[
Options: F - KS fixed hangul code format
         K - Sambo KSSM combi hangul
         1 - Sambo combi hangul (no hanja)
         2 - Samsong SPC combi hangul
         3 - Goldstar MIGHTY combi hangul
         4 - Old KS combi hangul
         5 - DKBII combi hangul
         6 - User defined combi hangul
         7 - 7 bit fixed hangul
]PRE]