Locale:...:KOI8_U(3)

okay bestie, welcome to the Locale:...:KOI8_U(3) page from the User Contributed Perl Documentation. The main character here is Locale::RecodeData::KOI8_U, and we’re getting into it πŸ’…


πŸ’– NAME πŸ’–

Locale::RecodeData::KOI8_U β€” conversion routines for KOI8-U. That’s literally the name, periodt ✨

🌸 SYNOPSIS 🌸

This module is internal to libintl. Do not use directly!

No cap, bestie: it says do not use directly 😭 That’s the whole synopsis vibe.

πŸ¦‹ DESCRIPTION πŸ¦‹

This module is generated, okay? It contains the conversion tables and routines for KOI8-U. Generated content, conversion tables, routines β€” all of it, mwah πŸŽ€

πŸŽ€ COMMENTS πŸŽ€

The following comments have been extracted from the original charmap:

version: 1.1
 source: RFC 2319
 source: http://www.net.ua/KOI8-U/

Please note that aliases listed above are not necessarily valid! πŸ™ˆ

πŸ‘‘ CHARACTER TABLE πŸ‘‘

The following table is sorted in the same order as the original charmap. All character codes are in hexadecimal. Please read 'ISO-10646' as 'ISO-10646-UCS4'. ✨

        Local | ISO-10646 | Description
       -------+-----------+-------------------------------------------------

okay bestie, the moment we've all been waiting for β€” the actual byte-by-byte glow-up of KOI8_U. Three columns, no filler: the local byte, the ISO-10646 code point it maps to, and what that character actually is. Read it like a group chat roster: everybody's here, nobody's left out. πŸ’…

πŸ’€ The control characters, a.k.a. the OGs (0x00–0x1F)

These are the ancient ones. They don't look like anything, they do things β€” beep, back up, feed a line. Respect them.

           00 |  00000000 | NULL (NUL)
           01 |  00000001 | START OF HEADING (SOH)
           02 |  00000002 | START OF TEXT (STX)
           03 |  00000003 | END OF TEXT (ETX)
           04 |  00000004 | END OF TRANSMISSION (EOT)
           05 |  00000005 | ENQUIRY (ENQ)
           06 |  00000006 | ACKNOWLEDGE (ACK)
           07 |  00000007 | BELL (BEL)
           08 |  00000008 | BACKSPACE (BS)
           09 |  00000009 | CHARACTER TABULATION (HT)
           0A |  0000000A | LINE FEED (LF)
           0B |  0000000B | LINE TABULATION (VT)
           0C |  0000000C | FORM FEED (FF)
           0D |  0000000D | CARRIAGE RETURN (CR)
           0E |  0000000E | SHIFT OUT (SO)
           0F |  0000000F | SHIFT IN (SI)
           10 |  00000010 | DATALINK ESCAPE (DLE)
           11 |  00000011 | DEVICE CONTROL ONE (DC1)
           12 |  00000012 | DEVICE CONTROL TWO (DC2)
           13 |  00000013 | DEVICE CONTROL THREE (DC3)
           14 |  00000014 | DEVICE CONTROL FOUR (DC4)
           15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
           16 |  00000016 | SYNCHRONOUS IDLE (SYN)
           17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
           18 |  00000018 | CANCEL (CAN)
           19 |  00000019 | END OF MEDIUM (EM)
           1A |  0000001A | SUBSTITUTE (SUB)
           1B |  0000001B | ESCAPE (ESC)
           1C |  0000001C | FILE SEPARATOR (IS4)
           1D |  0000001D | GROUP SEPARATOR (IS3)
           1E |  0000001E | RECORD SEPARATOR (IS2)
           1F |  0000001F | UNIT SEPARATOR (IS1)

not the IS4/IS3/IS2/IS1 suffixes lowkey confusing everyone β€” yes, the FILE/GROUP/RECORD/UNIT SEPARATORs carry those parenthesised aliases, and they're staying. Periodt.


🌸 The printable ASCII era (0x20–0x7E)

Space through tilde. Every keyboard you've ever touched lives here. This is the part of the table that ate and left no crumbs.

           20 |  00000020 | SPACE
           21 |  00000021 | EXCLAMATION MARK
           22 |  00000022 | QUOTATION MARK
           23 |  00000023 | NUMBER SIGN
           24 |  00000024 | DOLLAR SIGN
           25 |  00000025 | PERCENT SIGN
           26 |  00000026 | AMPERSAND
           27 |  00000027 | APOSTROPHE
           28 |  00000028 | LEFT PARENTHESIS
           29 |  00000029 | RIGHT PARENTHESIS
           2A |  0000002A | ASTERISK
           2B |  0000002B | PLUS SIGN
           2C |  0000002C | COMMA
           2D |  0000002D | HYPHEN-MINUS
           2E |  0000002E | FULL STOP
           2F |  0000002F | SOLIDUS
           30 |  00000030 | DIGIT ZERO
           31 |  00000031 | DIGIT ONE
           32 |  00000032 | DIGIT TWO
           33 |  00000033 | DIGIT THREE
           34 |  00000034 | DIGIT FOUR
           35 |  00000035 | DIGIT FIVE
           36 |  00000036 | DIGIT SIX
           37 |  00000037 | DIGIT SEVEN
           38 |  00000038 | DIGIT EIGHT
           39 |  00000039 | DIGIT NINE
           3A |  0000003A | COLON
           3B |  0000003B | SEMICOLON
           3C |  0000003C | LESS-THAN SIGN
           3D |  0000003D | EQUALS SIGN
           3E |  0000003E | GREATER-THAN SIGN
           3F |  0000003F | QUESTION MARK
           40 |  00000040 | COMMERCIAL AT
           41 |  00000041 | LATIN CAPITAL LETTER A
           42 |  00000042 | LATIN CAPITAL LETTER B
           43 |  00000043 | LATIN CAPITAL LETTER C
           44 |  00000044 | LATIN CAPITAL LETTER D
           45 |  00000045 | LATIN CAPITAL LETTER E
           46 |  00000046 | LATIN CAPITAL LETTER F
           47 |  00000047 | LATIN CAPITAL LETTER G
           48 |  00000048 | LATIN CAPITAL LETTER H
           49 |  00000049 | LATIN CAPITAL LETTER I
           4A |  0000004A | LATIN CAPITAL LETTER J
           4B |  0000004B | LATIN CAPITAL LETTER K
           4C |  0000004C | LATIN CAPITAL LETTER L
           4D |  0000004D | LATIN CAPITAL LETTER M
           4E |  0000004E | LATIN CAPITAL LETTER N
           4F |  0000004F | LATIN CAPITAL LETTER O
           50 |  00000050 | LATIN CAPITAL LETTER P
           51 |  00000051 | LATIN CAPITAL LETTER Q
           52 |  00000052 | LATIN CAPITAL LETTER R
           53 |  00000053 | LATIN CAPITAL LETTER S
           54 |  00000054 | LATIN CAPITAL LETTER T
           55 |  00000055 | LATIN CAPITAL LETTER U
           56 |  00000056 | LATIN CAPITAL LETTER V
           57 |  00000057 | LATIN CAPITAL LETTER W
           58 |  00000058 | LATIN CAPITAL LETTER X
           59 |  00000059 | LATIN CAPITAL LETTER Y
           5A |  0000005A | LATIN CAPITAL LETTER Z
           5B |  0000005B | LEFT SQUARE BRACKET
           5C |  0000005C | REVERSE SOLIDUS
           5D |  0000005D | RIGHT SQUARE BRACKET
           5E |  0000005E | CIRCUMFLEX ACCENT
           5F |  0000005F | LOW LINE
           60 |  00000060 | GRAVE ACCENT
           61 |  00000061 | LATIN SMALL LETTER A
           62 |  00000062 | LATIN SMALL LETTER B
           63 |  00000063 | LATIN SMALL LETTER C
           64 |  00000064 | LATIN SMALL LETTER D
           65 |  00000065 | LATIN SMALL LETTER E
           66 |  00000066 | LATIN SMALL LETTER F
           67 |  00000067 | LATIN SMALL LETTER G
           68 |  00000068 | LATIN SMALL LETTER H
           69 |  00000069 | LATIN SMALL LETTER I
           6A |  0000006A | LATIN SMALL LETTER J
           6B |  0000006B | LATIN SMALL LETTER K
           6C |  0000006C | LATIN SMALL LETTER L
           6D |  0000006D | LATIN SMALL LETTER M
           6E |  0000006E | LATIN SMALL LETTER N
           6F |  0000006F | LATIN SMALL LETTER O
           70 |  00000070 | LATIN SMALL LETTER P
           71 |  00000071 | LATIN SMALL LETTER Q
           72 |  00000072 | LATIN SMALL LETTER R
           73 |  00000073 | LATIN SMALL LETTER S
           74 |  00000074 | LATIN SMALL LETTER T
           75 |  00000075 | LATIN SMALL LETTER U
           76 |  00000076 | LATIN SMALL LETTER V
           77 |  00000077 | LATIN SMALL LETTER W
           78 |  00000078 | LATIN SMALL LETTER X
           79 |  00000079 | LATIN SMALL LETTER Y
           7A |  0000007A | LATIN SMALL LETTER Z
           7B |  0000007B | LEFT CURLY BRACKET
           7C |  0000007C | VERTICAL LINE
           7D |  0000007D | RIGHT CURLY BRACKET
           7E |  0000007E | TILDE
           7F |  0000007F | DELETE (DEL)

shoutout to 7F for being the villain of the set: DELETE (DEL). Anyway β€” that's where vanilla ASCII gives up and KOI8_U starts doing the most.


πŸŽ€ Box drawing era, activate (0x80–0x92)

Bestie. This is the part that makes KOI8_U iconic. Rows and columns and corners, all done with light strokes. It's giving "I made the whole terminal UI myself." 🌈

           80 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
           81 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
           82 |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
           83 |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
           84 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
           85 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
           86 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
           87 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
           88 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
           89 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
           8A |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL

Then the blocks and shadings come through β€” half blocks, full block, and the three shade levels, so you can absolutely render a gradient in a 1990s DOS box:

           8B |  00002580 | UPPER HALF BLOCK
           8C |  00002584 | LOWER HALF BLOCK
           8D |  00002588 | FULL BLOCK
           8E |  0000258C | LEFT HALF BLOCK
           8F |  00002590 | RIGHT HALF BLOCK
           90 |  00002591 | LIGHT SHADE
           91 |  00002592 | MEDIUM SHADE
           92 |  00002593 | DARK SHADE

πŸ”₯ The weird & wonderful row (0x93–0x9F)

Math symbols, a bullet, a non-breaking space, a degree sign, a superscript two, a middle dot, and a division sign. Truly a mixed bag but honestly? Every one of them served.

           93 |  00002320 | TOP HALF INTEGRAL
           94 |  000025A0 | BLACK SQUARE
           95 |  00002219 | BULLET OPERATOR
           96 |  0000221A | SQUARE ROOT
           97 |  00002248 | ALMOST EQUAL TO
           98 |  00002264 | LESS THAN OR EQUAL TO
           99 |  00002265 | GREATER THAN OR EQUAL TO
           9A |  000000A0 | NO-BREAK SPACE
           9B |  00002321 | BOTTOM HALF INTEGRAL
           9C |  000000B0 | DEGREE SIGN
           9D |  000000B2 | SUPERSCRIPT DIGIT TWO
           9E |  000000B7 | MIDDLE DOT
           9F |  000000F7 | DIVISION SIGN

quick heads-up, bestie: that 9A is NO-BREAK SPACE β€” it looks like a space, it is not the 20 SPACE. Don't let it gaslight you. πŸ™ˆ


πŸ¦‹ Double-line box drawing + the Ukrainian letters show up (0xA0–0xBF)

Now the box drawing levels up to double strokes, and the Cyrillic starts sliding in between the corners β€” IO, UKRAINIAN IE, BYELORUSSIAN-UKRAINIAN I, YI, and the GHE WITH UPTURN. This is the good stuff. ✨

           A0 |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
           A1 |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
           A2 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
           A3 |  00000451 | CYRILLIC SMALL LETTER IO
           A4 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
           A5 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
           A6 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
           A7 |  00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
           A8 |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
           A9 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
           AA |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
           AB |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
           AC |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
           AD |  00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
           AE |  0000255D | BOX DRAWINGS  DOUBLE UP AND LEFT
           AF |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
           B0 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
           B1 |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
           B2 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
           B3 |  00000401 | CYRILLIC CAPITAL LETTER IO
           B4 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
           B5 |  00002563 | DOUBLE VERTICAL AND LEFT
           B6 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
           B7 |  00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
           B8 |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
           B9 |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
           BA |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
           BB |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
           BC |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
           BD |  00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN
           BE |  0000256C | BOX DRAWINGS  DOUBLE VERTICAL AND HORIZONTAL
           BF |  000000A9 | COPYRIGHT SIGN
⚠️ fr fr, keep an eye on this one: AE and BE have a double space in the description (BOX DRAWINGS DOUBLE UP AND LEFT, BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL), and B5 says just DOUBLE VERTICAL AND LEFT with no BOX DRAWINGS prefix. That's how the table reads β€” don't "fix" it, just know it. 😭

also BF = COPYRIGHT SIGN?? nestled right at the end of the box drawing section?? slay placement honestly. Β©οΈπŸ’…


πŸ‘‘ Cyrillic small letters, the main event (0xC0–0xDF)

Twenty-two letters and they are all here β€” YU, A, BE, TSE, DE, IE, EF, GHE, HA, I, SHORT I, KA, EL, EM, EN, O, PE, YA, ER, ES, TE, U, ZHE, VE, SOFT SIGN, YERU, ZE, SHA, E, SHCHA, CHE, HARD SIGN. This is the alphabet's main character era. πŸ‘‘

           C0 |  0000044E | CYRILLIC SMALL LETTER YU
           C1 |  00000430 | CYRILLIC SMALL LETTER A
           C2 |  00000431 | CYRILLIC SMALL LETTER BE
           C3 |  00000446 | CYRILLIC SMALL LETTER TSE
           C4 |  00000434 | CYRILLIC SMALL LETTER DE
           C5 |  00000435 | CYRILLIC SMALL LETTER IE
           C6 |  00000444 | CYRILLIC SMALL LETTER EF
           C7 |  00000433 | CYRILLIC SMALL LETTER GHE
           C8 |  00000445 | CYRILLIC SMALL LETTER HA
           C9 |  00000438 | CYRILLIC SMALL LETTER I
           CA |  00000439 | CYRILLIC SMALL LETTER SHORT I
           CB |  0000043A | CYRILLIC SMALL LETTER KA
           CC |  0000043B | CYRILLIC SMALL LETTER EL
           CD |  0000043C | CYRILLIC SMALL LETTER EM
           CE |  0000043D | CYRILLIC SMALL LETTER EN
           CF |  0000043E | CYRILLIC SMALL LETTER O
           D0 |  0000043F | CYRILLIC SMALL LETTER PE
           D1 |  0000044F | CYRILLIC SMALL LETTER YA
           D2 |  00000440 | CYRILLIC SMALL LETTER ER
           D3 |  00000441 | CYRILLIC SMALL LETTER ES
           D4 |  00000442 | CYRILLIC SMALL LETTER TE
           D5 |  00000443 | CYRILLIC SMALL LETTER U
           D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
           D7 |  00000432 | CYRILLIC SMALL LETTER VE
           D8 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
           D9 |  0000044B | CYRILLIC SMALL LETTER YERU
           DA |  00000437 | CYRILLIC SMALL LETTER ZE
           DB |  00000448 | CYRILLIC SMALL LETTER SHA
           DC |  0000044D | CYRILLIC SMALL LETTER E
           DD |  00000449 | CYRILLIC SMALL LETTER SHCHA
           DE |  00000447 | CYRILLIC SMALL LETTER CHE
           DF |  0000044A | CYRILLIC SMALL LETTER HARD SIGN

iykyk: C0 is YU before C1 is A β€” the order is not alphabetical in the slightest, and that's just how KOI8_U rolls. 🫢


πŸ“ Cyrillic capital letters begin (0xE0–…)

Same alphabet, capitalised, and it kicks off in exactly the same order as the lowercase block:

           E0 |  0000042E | CYRILLIC CAPITAL LETTER YU
           E1 |  00000410 | CYRILLIC CAPITAL LETTER A
           E2 |  00000411 | CYRILLIC CAPITAL LETTER BE
           E3 |  00000426 | CYRILLIC CAPITAL LETTER TSE
           E4 |  00000414 | CYRILLIC CAPITAL LETTER DE
           E5 |  00000415 | CYRILLIC CAPITAL LETTER IE
           E6 |  00000424 | CYRILLIC CAPITAL LETTER EF
           E7 |  00000413 | CYRILLIC CAPITAL LETTER GHE
           E8 |  00000425 | CYRILLIC CAPITAL LETTER HA

and we keep going, bestie β€” no cliffhanger, just table. 🧚

  • E9 β†’ 00000418 β€” CYRILLIC CAPITAL LETTER I πŸ’…
  • EA β†’ 00000419 β€” CYRILLIC CAPITAL LETTER SHORT I
  • EB β†’ 0000041A β€” CYRILLIC CAPITAL LETTER KA
  • EC β†’ 0000041B β€” CYRILLIC CAPITAL LETTER EL
  • ED β†’ 0000041C β€” CYRILLIC CAPITAL LETTER EM
  • EE β†’ 0000041D β€” CYRILLIC CAPITAL LETTER EN
  • EF β†’ 0000041E β€” CYRILLIC CAPITAL LETTER O
  • F0 β†’ 0000041F β€” CYRILLIC CAPITAL LETTER PE
  • F1 β†’ 0000042F β€” CYRILLIC CAPITAL LETTER YA
  • F2 β†’ 00000420 β€” CYRILLIC CAPITAL LETTER ER
  • F3 β†’ 00000421 β€” CYRILLIC CAPITAL LETTER ES
  • F4 β†’ 00000422 β€” CYRILLIC CAPITAL LETTER TE
  • F5 β†’ 00000423 β€” CYRILLIC CAPITAL LETTER U
  • F6 β†’ 00000416 β€” CYRILLIC CAPITAL LETTER ZHE
  • F7 β†’ 00000412 β€” CYRILLIC CAPITAL LETTER VE
  • F8 β†’ 0000042C β€” CYRILLIC CAPITAL LETTER SOFT SIGN
  • F9 β†’ 0000042B β€” CYRILLIC CAPITAL LETTER YERU
  • FA β†’ 00000417 β€” CYRILLIC CAPITAL LETTER ZE
  • FB β†’ 00000428 β€” CYRILLIC CAPITAL LETTER SHA
  • FC β†’ 0000042D β€” CYRILLIC CAPITAL LETTER E
  • FD β†’ 00000429 β€” CYRILLIC CAPITAL LETTER SHCHA
  • FE β†’ 00000427 β€” CYRILLIC CAPITAL LETTER CHE
  • FF β†’ 0000042A β€” CYRILLIC CAPITAL LETTER HARD SIGN

okay and that's the whole table, bestie, you made it to FF πŸŽ‰ ngl the ordering gets a lil feral near the end (F1 just casually jumping to YA, and F6/F7 going back to 00000416 and 00000412) β€” that's just how the data is laid out, I don't make the rules, I just report them πŸ’€ copy it exactly and you're golden.


πŸ‘‘ AUTHOR

Copyright (C) 2002-2017 Guido Flohr <http://www.guido-flohr.net/> (<mailto:guido.flohr@cantanea.com>), all rights reserved. See the source code for details!

like, all rights reserved fr fr β€” if you're gonna do something with this, go read the source code for the details, that's the vibe 🫢


πŸ¦‹ SEE ALSO

the squad. go read them if you want the bigger picture ✨


and that's a wrap on the whole page, bestie!! πŸŽ€ this one's from perl v5.42.0, dated 2025-01-22 β€” so if you're reading this on some other version, do a lil vibe check on the date before you quote me πŸ’– mwah, go encode some Cyrillic πŸ’œ