KPS 9566’s use of the Unicode Private Use Area

Note: the 2005 versions of the KP series fonts (the ones marked 97KPS”, versioned 3.0”, dated 2003–2005 and shipped with Red Star OS 2.0) encode these over U+F000 through U+F046 inclusive, and then again over U+F100 through U+F146, in addition to including the ones mapped to standard Unicode codepoints in KPS 9566-2003 at the corresponding locations. That is to say, a given affected glyph is shown for anything up to three codepoints:

One of the five 2005 version fonts also shows the Euro sign glyph for both the Euro sign codepoint and the Kelvin sign codepoint (the Kelvin sign in KPS 9566-97 corresponds to the Euro sign in KPS 9566-2003), although the other three have a Kelvin sign glyph. Collectively, these observations suggest that the Red Star OS 2.0 versions of these fonts appear to be designed to render the KPS codes consistently in spite of multiple mapping versions.

The later 2012 versions of the KP series fonts (the ones marked 2011KPS”, versioned V4.0”, dated 2000–2012 and shipped with Red Star OS 3.0) only support the latter range, include the two Windows Glyph List allocations in the former range, remove the characters with standard mappings from the PUA, and add a few characters in the vacated space.

Note that I am not affiliated with the committees for either KPS 9566 or Unicode, nor with the DPRK at all. Rather, I’m working on the basis of any KPS-mapped fonts or documentation I can obtain online. KPS 9566-2011 includes additional non-syllable allocations outside of the EUC plane, which appears to divide into hanja, symbol and user-defined (i.e. all valid trail bytes with those leads are mapped to PUA) regions. However, certain characters in the symbol section map to U+Exxx range PUA characters. I have no source to refer to regarding what these are, so the chart below solely covers the U+F0xx and U+F1xx ranges.

A chart of 97KPS is publicly available, due to being registered for use with ISO/IEC 2022. Mappings of 2003KPS to Unicode were submitted to the project as OOo bug tracker #33466, and later published with corrections by the Unicode Consortium as KPS9566.TXT. Mappings and charts for 2011KPS can be obtained from Red Star OS 3.0. The table below notes where standard Unicode mappings match those listed for the 2003 and 2011 editions where applicable.

PUA                        EUC-KP  Comments and mappings to standard Unicode
U+F000 / U+F100        0xA1C0U+02D9 (rough fit, 2003/2011)
U+F001 (97KPS) / U+F1010xA1C1U+02BC (rough fit, 2003), U+FE10 (2011)
U+F002 (97KPS) / U+F1020xA1C2U+02DA (rough fit, 2003), U+FE12 (2011)
U+F001 (WGL4)            U+FB01 (WGL4)
U+F002 (WGL4)            U+FB02 (WGL4)
U+F003 / U+F103        0xA1C3U+02CA (rough fit, 2003), U+FE11 (2011)
U+F004 / U+F104        0xA1C5U+2E2F (rough fit, 2011), U+301C+F87E (from KanjiTalk 7 0xEB60; vertical U+301C”; U+F87E is PUA)
U+F005 / U+F105        0xA1DCNone; .)
U+F006 / U+F106        0xA1DDNone; .⟫
U+F007 / U+F107        0xA1DEU+201A (2003/2011)
U+F008 / U+F108        0xA1DFU+201B (2003/2011)
U+F009 / U+F109        0xA1E0U+201E (2003/2011)
U+F00A / U+F10A        0xA1E1U+201F (2003/2011)
U+F00B / U+F10B        0xA1E6U+FE47 (2003/2011)
U+F00C / U+F10C        0xA1E7U+FE48 (2003/2011)
U+F00D / U+F10D        0xA2F1U+25B4+20E4 (from MacKorean 0xA79B); it is a mountain symbol (U+26F0 is the Japanese equivalent, from ARIB-SJIS 0xEE56, but not mutually recognisable)
U+F00E / U+F10E        0xA2F2None; horizontal-striped triangular ascent” symbol
U+F00F / U+F10F        0xA2F3None; backslash-striped triangular slope on the left” symbol
U+F010 / U+F110        0xA2F4None; slash-striped triangular slope on the right” symbol
U+F011 / U+F111        0xA2F5U+2690 (2003/2011)
U+F012 / U+F112        0xA2F6U+2691 (2003/2011)
U+F013 / U+F113        0xA4E8(Kim: emboldened U+AE40)
U+F014 / U+F114        0xA4E9(Il: emboldened U+C77C)
U+F015 / U+F115        0xA4EA(Sung: emboldened U+C131)
U+F016 / U+F116        0xA4EB(Kim: emboldened U+AE40)
U+F017 / U+F117        0xA4EC(Jong: emboldened U+C815)
U+F018 / U+F118        0xA4ED(Il: emboldened U+C77C)
U+F019 / U+F119        0xA7FA(U+00BD with horizontal bar; diagonal bar is 0xA7EA)
U+F01A / U+F11A        0xA7FB(U+2153 with horizontal bar; diagonal bar is 0xA7EB)
U+F01B / U+F11B        0xA7FC(U+2154 with horizontal bar; diagonal bar is 0xA7EC)
U+F01C / U+F11C        0xA7FD(U+00BC with horizontal bar; diagonal bar is 0xA7ED)
U+F01D / U+F11D        0xA7FE(U+00BE with horizontal bar; diagonal bar is 0xA7EE)
U+F01E / U+F11E        0xA8B8U+3377 (2003/2011)
U+F01F / U+F11F        0xA8B9U+3378 (2003/2011)
U+F020 / U+F120 (97KPS)0xA8BAU+3379 (2003)
U+F021 / U+F121 (97KPS)0xA8DFU+33DE (2003)
U+F022 / U+F122 (97KPS)0xA8E0U+33DF (2003)
U+F120 (2011KPS)        0xA4EE(Kim: emboldened U+AE40)
U+F121 (2011KPS)        0xA4EF(Jong: emboldened U+C815)
U+F122 (2011KPS)        0xA4F0(Un: emboldened U+C740)
U+F023 / U+F123        0xA8F1U+33FF (2003/2011)
U+F024 / U+F124        0xA8F7U+32CC (2003/2011)
U+F025 / U+F125        0xA8FAU+32CD (2003/2011)
U+F026 / U+F126        0xA8FBU+32CE (2003/2011)
U+F027 / U+F127        0xACA1(WPK; U+262D+200D+1F58C or maybe U+262D+FE0F+200D+1F58C+FE0F might work as a kludge)
U+F028 / U+F128        0xACA2(Enclosed WPK; U+262D+200D+1F58C+20DD or maybe U+262D+FE0F+200D+1F58C+FE0F+20DD might work as a kludge)
U+F029 / U+F129        0xACA6U+2614 (2003/2011)
U+F02A / U+F12A        0xACA9U+26A1 (2003/2011)
U+F02B / U+F12B        0xACAAU+26A0 (2003/2011)
U+F02C / U+F12C        0xACBAU+2B00 (2011 and KPS9566.TXT), U+2B01 (in OOo submission for 2003, adhered to by swapped glyphs for U+2B00 versus U+2B01 in Red Star OS 2.0 (but not 3.0) fonts)
U+F02D / U+F12D        0xACBBU+2B01 (2011 and KPS9566.TXT), U+2B00 (in OOo submission for 2003, adhered to by swapped glyphs for U+2B00 versus U+2B01 in Red Star OS 2.0 (but not 3.0) fonts)
U+F02E / U+F12E        0xACBCU+2B02 (2003/2011)
U+F02F / U+F12F        0xACBDU+2B03 (2003/2011)
U+F030 / U+F130        0xACBEU+2B04 (2003/2011)
U+F031 / U+F131        0xACC0U+27A1 (2003/2011), U+2B95 (Unicode 7.0)
U+F032 / U+F132        0xACC1U+2B05 (2003/2011)
U+F033 / U+F133        0xACC2U+2B06 (2003/2011)
U+F034 / U+F134        0xACC3U+2B07 (2003/2011)
U+F035 / U+F135        0xACC4U+2B08 (2003/2011)
U+F036 / U+F136        0xACC5U+2B09 (2003/2011)
U+F037 / U+F137        0xACC6U+2B0A (2003/2011)
U+F038 / U+F138        0xACC7U+2B0B (2003/2011)
U+F039 / U+F139        0xACC8U+2B0C (2003/2011)
U+F03A / U+F13A        0xACC9U+2B0D (2003/2011)
U+F03B / U+F13B (97KPS)0xACCFU+2B97 (Unicode 13.0)
U+F13B (2011KPS)        0xACD3U+261E (2003; usually forehand, 0xE04D in KPS 9566-2011), U+1F449 (Unicode 6.0; expressly backhand)
U+F03C / U+F13C        0xACD4U+1F446+20DD (Unicode 6.0 sequence, supported by BabelStone Han)
U+F03D / U+F13D        0xACD5(U+2702 pointing northwest; its Zapf Dingbats symbol is rightward, but emoji fonts vary the direction; no otherwise-oriented KPS-coded scissors are known of; U+2702+FE0F+200D+2196+FE0F or U+2702+200D+2196 would be a generalisation of the UTS 51 direction mechanism)
U+F03E / U+F13E        0xACD6U+2615 (2003/2011)
U+F03F / U+F13F        0xACD7U+327C (2003/2011)
U+F040 / U+F140        0xACD8U+327D (2003/2011)
U+F041 / U+F141        0xACD9U+321D (2003/2011)
U+F042 / U+F142        0xACDAU+321E (2003/2011)
U+F043 / U+F143        0xACDCU+32CF (2003/2011)
U+F044 / U+F144        0xACDDU+3250 (2003/2011)
U+F045 / U+F145        0xACDFU+213B (2003/2011)
U+F046 / U+F146        0xACE0U+337A (2003/2011)