Locale:...:IBM880(3)

๐Ÿ’… Locale:...:IBM880(3) โ€” the group chat version

okay so real talk: this is Locale:...:IBM880(3) from the User Contributed Perl Documentation (section 3, bestie, we're in the library section). It's a Perl thing. It's an internal thing. And we're gonna get through it together ๐Ÿซถ


โœจ NAME โœจ

Locale::RecodeData::IBM880 โ€” literally just conversion routines for IBM880. That's the whole vibe. It converts. It's IBM880. slay ๐Ÿ’…

๐ŸŒธ SYNOPSIS ๐ŸŒธ

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

okay so no cap, that's the entire synopsis. It's not even code, it's a warning dressed up as a synopsis ๐Ÿ˜ญ This module is internal to libintl. Do not use directly! Like, the manpage is literally telling you to your face not to touch it. Respect the boundary, bestie. ๐Ÿšซ

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

So here's the tea: this module is generated โ€” nobody hand-wrote it, it's machine output, main character energy but make it automated โœจ โ€” and what it contains is the conversion tables and routines for IBM880. That's it. Tables + routines. The whole personality. ๐Ÿ‘‘

๐ŸŽ€ COMMENTS ๐ŸŽ€

Bestie, these are the comments that were extracted from the original charmap โ€” like, the receipts, straight from the source. Look at them, they're iconic:

version: 1.0
 source: IBM NLS RM Vol2 SE09-8002-01, March 1990
alias CP880
alias EBCDIC-CYRILLIC

So we got version: 1.0, and the source is IBM NLS RM Vol2 SE09-8002-01, March 1990 โ€” yes, March 1990, this charmap is older than most of the internet and it's still out here working, we love a vintage queen ๐ŸŒˆ. Then two aliases: CP880 and EBCDIC-CYRILLIC. Cute. Adorable. Butโ€”

Please note that aliases listed above are not necessarily valid! ๐Ÿšจ

fr fr, don't come for me if you try an alias and it doesn't work. The manpage said it first. I'm just the messenger ๐Ÿ’€

๐Ÿ‘‘ CHARACTER TABLE ๐Ÿ‘‘

Okay so this is the part where the actual table lives, and before we get into it, two things you need to know, and I need you to internalize them:

  • The table is sorted in the same order as the original charmap. Same order. Not alphabetical, not vibes-based, not "whatever looks nice" โ€” the original order, periodt. ๐Ÿ“‹
  • All character codes are in hexadecimal. Every single one. Hex girl summer. ๐Ÿ”ฅ

And then the one that trips people up every time:

When you see 'ISO-10646' in there, please read it as 'ISO-10646-UCS4'. ๐Ÿ™ˆ

That's it, that's the whole disclaimer. ISO-10646 = ISO-10646-UCS4. They're the same thing here, it's just the charmap being casual about it. iykyk ๐Ÿ’œ

to be continued, bestie โ€” the table itself is coming in the next part ๐Ÿงš

        Local | ISO-10646 | Description
       -------+-----------+-------------------------------------------------
           00 |  00000000 | NULL (NUL)
           01 |  00000001 | START OF HEADING (SOH)
           02 |  00000002 | START OF TEXT (STX)
           03 |  00000003 | END OF TEXT (ETX)
           04 |  0000009C | STRING TERMINATOR (ST)
           05 |  00000009 | CHARACTER TABULATION (HT)
           06 |  00000086 | START OF SELECTED AREA (SSA)
           07 |  0000007F | DELETE (DEL)
           08 |  00000097 | END OF GUARDED AREA (EPA)
           09 |  0000008D | REVERSE LINE FEED (RI)
           0A |  0000008E | SINGLE-SHIFT TWO (SS2)
           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 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
           15 |  00000085 | NEXT LINE (NEL)
           16 |  00000008 | BACKSPACE (BS)
           17 |  00000087 | END OF SELECTED AREA (ESA)
           18 |  00000018 | CANCEL (CAN)
           19 |  00000019 | END OF MEDIUM (EM)
           1A |  00000092 | PRIVATE USE TWO (PU2)
           1B |  0000008F | SINGLE-SHIFT THREE (SS3)
           1C |  0000001C | FILE SEPARATOR (IS4)
           1D |  0000001D | GROUP SEPARATOR (IS3)
           1E |  0000001E | RECORD SEPARATOR (IS2)
           1F |  0000001F | UNIT SEPARATOR (IS1)
           20 |  00000080 | PADDING CHARACTER (PAD)
           21 |  00000081 | HIGH OCTET PRESET (HOP)
           22 |  00000082 | BREAK PERMITTED HERE (BPH)
           23 |  00000083 | NO BREAK HERE (NBH)
           24 |  00000084 | INDEX (IND)
           25 |  0000000A | LINE FEED (LF)
           26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
           27 |  0000001B | ESCAPE (ESC)
           28 |  00000088 | CHARACTER TABULATION SET (HTS)
           29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
           2A |  0000008A | LINE TABULATION SET (VTS)
           2B |  0000008B | PARTIAL LINE FORWARD (PLD)
           2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
           2D |  00000005 | ENQUIRY (ENQ)
           2E |  00000006 | ACKNOWLEDGE (ACK)
           2F |  00000007 | BELL (BEL)
           30 |  00000090 | DEVICE CONTROL STRING (DCS)
           31 |  00000091 | PRIVATE USE ONE (PU1)
           32 |  00000016 | SYNCHRONOUS IDLE (SYN)
           33 |  00000093 | SET TRANSMIT STATE (STS)
           34 |  00000094 | CANCEL CHARACTER (CCH)
           35 |  00000095 | MESSAGE WAITING (MW)
           36 |  00000096 | START OF GUARDED AREA (SPA)
           37 |  00000004 | END OF TRANSMISSION (EOT)
           38 |  00000098 | START OF STRING (SOS)
           39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
           3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
           3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
           3C |  00000014 | DEVICE CONTROL FOUR (DC4)
           3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
           3E |  0000009E | PRIVACY MESSAGE (PM)
           3F |  0000001A | SUBSTITUTE (SUB)

okay bestie, look at this first block and breathe. This is the control-character zone of IBM880, and the whole vibe is chaos ๐Ÿ’… Like, the local byte values go up in order 00, 01, 02, 03โ€ฆ but the ISO-10646 code points they map to are all over the place โ€” that is literally the entire point of this table and it is not a typo. Do not "fix" it. Do not assume 04 means code point 04. It means 0000009C, and that's STRING TERMINATOR (ST). Periodt. โœจ

The one that gets everybody: local 25 is 0000000A, which is LINE FEED (LF), and local 16 is 00000008, which is BACKSPACE (BS). Yes, LF shows up at 25. Yes, that's weird. No, you don't get to be mad about it โ€” the mapping says what the mapping says ๐Ÿซถ

Also 07 โ†’ 0000007F DELETE (DEL)?? iconic. 2F โ†’ 00000007 BELL (BEL)?? love a bell. And 3F โ†’ 0000001A SUBSTITUTE (SUB), chef's kiss. ๐ŸŽ€


๐Ÿฆ‹ the printable zone (well, mostly)

           40 |  00000020 | SPACE
           42 |  00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian)
           43 |  00000453 | CYRILLIC SMALL LETTER GJE
           44 |  00000451 | CYRILLIC SMALL LETTER IO
           46 |  00000455 | CYRILLIC SMALL LETTER DZE
           47 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
           48 |  00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
           49 |  00000458 | CYRILLIC SMALL LETTER JE
           4A |  0000005B | LEFT SQUARE BRACKET
           4B |  0000002E | FULL STOP
           4C |  0000003C | LESS-THAN SIGN
           4D |  00000028 | LEFT PARENTHESIS
           4E |  0000002B | PLUS SIGN
           4F |  00000021 | EXCLAMATION MARK
           50 |  00000026 | AMPERSAND
           51 |  00000459 | CYRILLIC SMALL LETTER LJE
           52 |  0000045A | CYRILLIC SMALL LETTER NJE
           53 |  0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian)
           54 |  0000045C | CYRILLIC SMALL LETTER KJE
           56 |  0000045F | CYRILLIC SMALL LETTER DZHE
           57 |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
           58 |  00002116 | NUMERO SIGN
           59 |  00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
           5A |  0000005D | RIGHT SQUARE BRACKET
           5B |  00000024 | DOLLAR SIGN
           5C |  0000002A | ASTERISK
           5D |  00000029 | RIGHT PARENTHESIS
           5E |  0000003B | SEMICOLON
           5F |  0000005E | CIRCUMFLEX ACCENT
           60 |  0000002D | HYPHEN-MINUS
           61 |  0000002F | SOLIDUS
           62 |  00000403 | CYRILLIC CAPITAL LETTER GJE
           63 |  00000401 | CYRILLIC CAPITAL LETTER IO
           65 |  00000405 | CYRILLIC CAPITAL LETTER DZE
           66 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
           67 |  00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
           68 |  00000408 | CYRILLIC CAPITAL LETTER JE
           69 |  00000409 | CYRILLIC CAPITAL LETTER LJE
           6A |  000000A6 | BROKEN BAR
           6B |  0000002C | COMMA
           6C |  00000025 | PERCENT SIGN
           6D |  0000005F | LOW LINE
           6E |  0000003E | GREATER-THAN SIGN
           6F |  0000003F | QUESTION MARK
           70 |  0000040A | CYRILLIC CAPITAL LETTER NJE
           71 |  0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
           72 |  0000040C | CYRILLIC CAPITAL LETTER KJE
           75 |  0000040F | CYRILLIC CAPITAL LETTER DZHE
           76 |  0000044E | CYRILLIC SMALL LETTER YU
           77 |  00000430 | CYRILLIC SMALL LETTER A
           78 |  00000431 | CYRILLIC SMALL LETTER BE
           7A |  0000003A | COLON
           7B |  00000023 | NUMBER SIGN
           7C |  00000040 | COMMERCIAL AT
           7D |  00000027 | APOSTROPHE
           7E |  0000003D | EQUALS SIGN
           7F |  00000022 | QUOTATION MARK

This chunk is where it starts feeling like a scavenger hunt ๐Ÿ” Notice the local values 41, 45, 55, 64, 73, 74 and 79 justโ€ฆ aren't here. The page gives no row for them, so nope, I'm not out here inventing one for you ๐Ÿ’€ The table lists what it lists, and we respect the table.

Highkey the stars of this block are the Cyrillic letters sprinkled in between the ASCII punctuation like it's a salad ๐Ÿฅ— โ€” 4A is a plain old LEFT SQUARE BRACKET, then boom, 51 is CYRILLIC SMALL LETTER LJE, then 53 is CYRILLIC SMALL LETTER TSHE (Serbocroatian). Note that (Serbocroatian) label, bestie โ€” copy it exactly how it's written, don't go modernising it into "Serbo-Croatian" ๐Ÿ™ˆ Same with (Ukrainian) on 48 and 67.

And can we talk about 58 โ†’ 00002116 NUMERO SIGN?? a code point up in the 2116 range chilling between two Cyrillic capitals, main character energy for real ๐Ÿ‘‘ Also 6A is BROKEN BAR, which is a mood.


๐ŸŒธ small letters, big feelings

           80 |  00000446 | CYRILLIC SMALL LETTER TSE
           81 |  00000061 | LATIN SMALL LETTER A
           82 |  00000062 | LATIN SMALL LETTER B
           83 |  00000063 | LATIN SMALL LETTER C
           84 |  00000064 | LATIN SMALL LETTER D
           85 |  00000065 | LATIN SMALL LETTER E
           86 |  00000066 | LATIN SMALL LETTER F
           87 |  00000067 | LATIN SMALL LETTER G
           88 |  00000068 | LATIN SMALL LETTER H
           89 |  00000069 | LATIN SMALL LETTER I
           8A |  00000434 | CYRILLIC SMALL LETTER DE
           8B |  00000435 | CYRILLIC SMALL LETTER IE
           8C |  00000444 | CYRILLIC SMALL LETTER EF
           8D |  00000433 | CYRILLIC SMALL LETTER GHE
           8E |  00000445 | CYRILLIC SMALL LETTER HA
           8F |  00000438 | CYRILLIC SMALL LETTER I
           90 |  00000439 | CYRILLIC SMALL LETTER SHORT I
           91 |  0000006A | LATIN SMALL LETTER J
           92 |  0000006B | LATIN SMALL LETTER K
           93 |  0000006C | LATIN SMALL LETTER L
           94 |  0000006D | LATIN SMALL LETTER M
           95 |  0000006E | LATIN SMALL LETTER N
           96 |  0000006F | LATIN SMALL LETTER O
           97 |  00000070 | LATIN SMALL LETTER P
           98 |  00000071 | LATIN SMALL LETTER Q
           99 |  00000072 | LATIN SMALL LETTER R
           9A |  0000043A | CYRILLIC SMALL LETTER KA
           9B |  0000043B | CYRILLIC SMALL LETTER EL
           9C |  0000043C | CYRILLIC SMALL LETTER EM
           9D |  0000043D | CYRILLIC SMALL LETTER EN
           9E |  0000043E | CYRILLIC SMALL LETTER O
           9F |  0000043F | CYRILLIC SMALL LETTER PE
           A0 |  0000044F | CYRILLIC SMALL LETTER YA
           A2 |  00000073 | LATIN SMALL LETTER S
           A3 |  00000074 | LATIN SMALL LETTER T
           A4 |  00000075 | LATIN SMALL LETTER U
           A5 |  00000076 | LATIN SMALL LETTER V
           A6 |  00000077 | LATIN SMALL LETTER W
           A7 |  00000078 | LATIN SMALL LETTER X
           A8 |  00000079 | LATIN SMALL LETTER Y
           A9 |  0000007A | LATIN SMALL LETTER Z
           AA |  00000440 | CYRILLIC SMALL LETTER ER
           AB |  00000441 | CYRILLIC SMALL LETTER ES
           AC |  00000442 | CYRILLIC SMALL LETTER TE
           AD |  00000443 | CYRILLIC SMALL LETTER U
           AE |  00000436 | CYRILLIC SMALL LETTER ZHE
           AF |  00000432 | CYRILLIC SMALL LETTER VE
           B0 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
           B1 |  0000044B | CYRILLIC SMALL LETTER YERU
           B2 |  00000437 | CYRILLIC SMALL LETTER ZE
           B3 |  00000448 | CYRILLIC SMALL LETTER SHA
           B4 |  0000044D | CYRILLIC SMALL LETTER E
           B5 |  00000449 | CYRILLIC SMALL LETTER SHCHA
           B6 |  00000447 | CYRILLIC SMALL LETTER CHE
           B7 |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
           B8 |  0000042E | CYRILLIC CAPITAL LETTER YU
           B9 |  00000410 | CYRILLIC CAPITAL LETTER A
           BA |  00000411 | CYRILLIC CAPITAL LETTER BE
           BB |  00000426 | CYRILLIC CAPITAL LETTER TSE
           BC |  00000414 | CYRILLIC CAPITAL LETTER DE
           BD |  00000415 | CYRILLIC CAPITAL LETTER IE
           BE |  00000424 | CYRILLIC CAPITAL LETTER EF
           BF |  00000413 | CYRILLIC CAPITAL LETTER GHE

see how the lowercase Latin letters cluster around 81โ€“89 and then pick back up at 91โ€“99 and A2โ€“A9? the Cyrillic is just nestled in there like it owns the place ๐Ÿงš cute. Also lowkey obsessed that local 8F is CYRILLIC SMALL LETTER I while 89 is LATIN SMALL LETTER I โ€” the letter i has TWO homes in this charset and honestly? relatable, we contain multitudes ๐Ÿ’œ

Don't miss A1 โ€” again, no row, no opinion from me, moving on ๐Ÿ’… And yes, B8 is a capital YU sitting in the middle of all the small letters, and B9โ€“BF flip over to capitals too. The table does what it wants.


๐Ÿ‘‘ the capitals arc

           C1 |  00000041 | LATIN CAPITAL LETTER A
           C2 |  00000042 | LATIN CAPITAL LETTER B
           C3 |  00000043 | LATIN CAPITAL LETTER C
           C4 |  00000044 | LATIN CAPITAL LETTER D
           C5 |  00000045 | LATIN CAPITAL LETTER E
           C6 |  00000046 | LATIN CAPITAL LETTER F
           C7 |  00000047 | LATIN CAPITAL LETTER G
           C8 |  00000048 | LATIN CAPITAL LETTER H
           C9 |  00000049 | LATIN CAPITAL LETTER I
           CA |  00000425 | CYRILLIC CAPITAL LETTER HA
           CB |  00000418 | CYRILLIC CAPITAL LETTER I
           CC |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
           CD |  0000041A | CYRILLIC CAPITAL LETTER KA
           CE |  0000041B | CYRILLIC CAPITAL LETTER EL
           CF |  0000041C | CYRILLIC CAPITAL LETTER EM
           D1 |  0000004A | LATIN CAPITAL LETTER J
           D2 |  0000004B | LATIN CAPITAL LETTER K
           D3 |  0000004C | LATIN CAPITAL LETTER L
           D4 |  0000004D | LATIN CAPITAL LETTER M
           D5 |  0000004E | LATIN CAPITAL LETTER N
           D6 |  0000004F | LATIN CAPITAL LETTER O
           D7 |  00000050 | LATIN CAPITAL LETTER P
           D8 |  00000051 | LATIN CAPITAL LETTER Q
           D9 |  00000052 | LATIN CAPITAL LETTER R
           DA |  0000041D | CYRILLIC CAPITAL LETTER EN
           DB |  0000041E | CYRILLIC CAPITAL LETTER O
           DC |  0000041F | CYRILLIC CAPITAL LETTER PE
           DD |  0000042F | CYRILLIC CAPITAL LETTER YA
           DE |  00000420 | CYRILLIC CAPITAL LETTER ER
           DF |  00000421 | CYRILLIC CAPITAL LETTER ES
           E0 |  0000005C | REVERSE SOLIDUS
           E1 |  000000A4 | CURRENCY SIGN
           E2 |  00000053 | LATIN CAPITAL LETTER S
           E3 |  00000054 | LATIN CAPITAL LETTER T
           E4 |  00000055 | LATIN CAPITAL LETTER U
           E5 |  00000056 | LATIN CAPITAL LETTER V
           E6 |  00000057 | LATIN CAPITAL LETTER W
           E7 |  00000058 | LATIN CAPITAL LETTER X
           E8 |  00000059 | LATIN CAPITAL LETTER Y
           E9 |  0000005A | LATIN CAPITAL LETTER Z
           EA |  00000422 | CYRILLIC CAPITAL LETTER TE
           EB |  00000423 | CYRILLIC CAPITAL LETTER U
           EC |  00000416 | CYRILLIC CAPITAL LETTER ZHE
           ED |  00000412 | CYRILLIC CAPITAL LETTER VE
           EE |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
           EF |  0000042B | CYRILLIC CAPITAL LETTER YERU
           F0 |  00000030 | DIGIT ZERO
           F1 |  00000031 | DIGIT ONE

okay so the whole C1โ€“E9 stretch is your Latin capitals doing their thing, but the Cyrillic capitals keep cutting in like "excuse me, my turn" ๐Ÿ˜ญ CA through CF are all Cyrillic, then it snaps back to Latin D1โ€“D9, then Cyrillic DAโ€“DF, then โ€” plot twist โ€” E0 is REVERSE SOLIDUS and E1 is CURRENCY SIGN ๐Ÿ’ฐ like what are you two doing here, this is a letters-only party?? whatever, they're invited, they're iconic.

And the very last two rows we get here: F0 โ†’ 00000030 DIGIT ZERO and F1 โ†’ 00000031 DIGIT ONE. The digits have finally entered the chat, starting at F0 of all places, and we only get zero and one in this part of the page ๐Ÿ“ fr fr it's giving cliffhanger.

Reminder bestie: every local value in this table is a hex byte and every ISO-10646 value is written as an eight-digit code point like 00000041. Keep the leading zeros exactly as shown โ€” they're part of the look, and I will cry if you strip them ๐Ÿ˜ญ

Also C0 and D0? Not listed. Same rule as before: if the page doesn't give a row, neither do I ๐Ÿ™ˆ


Okay bestie, final stretch of the table โ€” every single row stays, no skipping, no cap ๐Ÿ’–:

F2 |  00000032 | DIGIT TWO
F3 |  00000033 | DIGIT THREE
F4 |  00000034 | DIGIT FOUR
F5 |  00000035 | DIGIT FIVE
F6 |  00000036 | DIGIT SIX
F7 |  00000037 | DIGIT SEVEN
F8 |  00000038 | DIGIT EIGHT
F9 |  00000039 | DIGIT NINE
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 |  0000009F | APPLICATION PROGRAM COMMAND (APC)

That last FF row is literally APPLICATION PROGRAM COMMAND (APC) โ€” sheโ€™s the final one, and yes, sheโ€™s staying ๐Ÿซถ.

๐ŸŒŸ AUTHOR ๐ŸŒŸ

This pageโ€™s copyright line is exactly: Copyright (C) 2002-2017 Guido Flohr <http://www.guido-flohr.net/> (<mailto:guido.flohr@cantanea.com>), all rights reserved. And the source note is verbatim See the source code for details!code for details! โ€” yes, the double code for details! is really in there, and we are not touching it ๐Ÿ’€.

๐Ÿ”ฎ SEE ALSO ๐Ÿ”ฎ

Go peek at Locale::RecodeData(3), Locale::Recode(3), and perl(1) โ€” thatโ€™s the whole SEE ALSO, bestie ๐Ÿฆ‹.


And thatโ€™s a wrap on Locale:...:IBM880(3) ๐Ÿ’… โ€” this iconic page comes from perl v5.42.0, dated 2025-01-22. Periodt ๐ŸŽ€โœจ