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 ๐โจ
๐ฆ where this page comes from
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 ยท GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 ยท GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 ยท GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 ยท GPL-3.0-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms