Locale:...:IBM870(3)
πΈ Locale::RecodeData::IBM870 πΈ
okay bestie, so this is Locale::RecodeData::IBM870 from the User Contributed Perl Documentation, and it's giving very niche, very iconic conversion-table energy. Let's get into it π
β¨ NAME β¨
Locale::RecodeData::IBM870 β literally just conversion routines for IBM870. That's the whole vibe. π
π¦ SYNOPSIS π¦
okay so hear me out:
This module is internal to libintl. Do not use directly!
not me having to say this but β this module is internal to libintl. Do not use it directly, bestie. I'm serious. It's not for you, it's for libintl. Hands off π
π DESCRIPTION π
so this module is generated β like, nobody hand-wrote it, it just exists β and it contains the conversion tables and routines for IBM870. That's it. That's the whole personality. slay π«Ά
π COMMENTS π
okay so these comments were extracted from the original charmap, and I'm quoting them exactly because details matter:
version: 1.0
source: IBM NLS RM Vol2 SE09-8002-01, March 1990
alias CP870
alias EBCDIC-CP-ROECE
alias EBCDIC-CP-YU
so we got version: 1.0, source is IBM NLS RM Vol2 SE09-8002-01, March 1990 (vintage! β), and three aliases: CP870, EBCDIC-CP-ROECE, and EBCDIC-CP-YU.
β οΈ and please note β the aliases listed above are not necessarily valid! like, don't come for me if they don't work, I'm just the messenger π
π₯ CHARACTER TABLE π₯
okay so the table that follows? it's sorted in the same order as the original charmap. all character codes are in hexadecimal. and this next bit is important, so read it twice:
bestie, when you see'ISO-10646'in there, please read it as'ISO-10646-UCS4'. iykyk π
more coming, stay tuned π
okay bestie, deep breath, hydrate, stretch β this is the part where the table actually happens. three columns: Local, ISO-10646, and Description, and every single row gets its moment. no skips, no "etc.", we're doing all of it π
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 first of all, the control-character block is a whole mood π like 04 is STRING TERMINATOR (ST) mapping to 0000009C, 07 is DELETE (DEL) mapping to 0000007F β the local byte is literally not the same as the ISO-10646 value and that is fully the point of the table, bestie. don't panic, just read both columns π«Ά
and yes, 25 being LINE FEED (LF) at 0000000A while 0A gets 0000008E? iconic chaos, we respect it π
anyway 40 arrives and it's giving "we're doing actual letters now" energy β¨
40 | 00000020 | SPACE
41 | 000000A0 | NO-BREAK SPACE
43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE
46 | 00000103 | LATIN SMALL LETTER A WITH BREVE
47 | 0000010D | LATIN SMALL LETTER C WITH CARON
48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA
49 | 00000107 | LATIN SMALL LETTER C WITH ACUTE
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 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE
53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS
54 | 0000016F | LATIN SMALL LETTER U WITH RING ABOVE
55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE
57 | 0000013E | LATIN SMALL LETTER L WITH CARON
58 | 0000013A | LATIN SMALL LETTER L WITH ACUTE
59 | 000000DF | LATIN SMALL LETTER SHARP S (German)
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
63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
64 | 000002DD | DOUBLE ACUTE ACCENT
65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
67 | 0000010C | LATIN CAPITAL LETTER C WITH CARON
68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
69 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE
6A | 0000007C | VERTICAL LINE
6B | 0000002C | COMMA
6C | 00000025 | PERCENT SIGN
6D | 0000005F | LOW LINE
6E | 0000003E | GREATER-THAN SIGN
6F | 0000003F | QUESTION MARK
70 | 000002C7 | CARON (Mandarin Chinese third tone)
71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
74 | 0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE
75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE
77 | 0000013D | LATIN CAPITAL LETTER L WITH CARON
78 | 00000139 | LATIN CAPITAL LETTER L WITH ACUTE
79 | 00000060 | GRAVE ACCENT
7A | 0000003A | COLON
7B | 00000023 | NUMBER SIGN
7C | 00000040 | COMMERCIAL AT
7D | 00000027 | APOSTROPHE
7E | 0000003D | EQUALS SIGN
7F | 00000022 | QUOTATION MARK
bestie look at 59 β LATIN SMALL LETTER SHARP S (German) at 000000DF, a whole legend πΈ and 70 is CARON (Mandarin Chinese third tone) at 000002C7 which is such a specific and delightful little fact to just casually drop in a table, we stan a multilingual icon π
also lowkey note that some slots are just not there β42,44,52,56,62,66,72,76β that's not a typo on my end, the table literally skips them, don't come for me π
then 80 hits and it's just vibes, alphabet era, the lowercase girlies are all lined up π
80 | 000002D8 | BREVE
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 | 0000015B | LATIN SMALL LETTER S WITH ACUTE
8B | 00000148 | LATIN SMALL LETTER N WITH CARON
8C | 00000111 | LATIN SMALL LETTER D WITH STROKE
8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE
8E | 00000159 | LATIN SMALL LETTER R WITH CARON
90 | 000000B0 | DEGREE SIGN
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 | 00000142 | LATIN SMALL LETTER L WITH STROKE
9B | 00000144 | LATIN SMALL LETTER N WITH ACUTE
9C | 00000161 | LATIN SMALL LETTER S WITH CARON
9D | 000000B8 | CEDILLA
9E | 000002DB | OGONEK
9F | 000000A4 | CURRENCY SIGN
A0 | 00000105 | LATIN SMALL LETTER A WITH OGONEK
A1 | 0000007E | TILDE
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 | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE
AB | 00000147 | LATIN CAPITAL LETTER N WITH CARON
AC | 00000110 | LATIN CAPITAL LETTER D WITH STROKE
AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
AE | 00000158 | LATIN CAPITAL LETTER R WITH CARON
B0 | 000000B7 | MIDDLE DOT
B1 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK
B2 | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
B4 | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
B5 | 000000A7 | SECTION SIGN
B6 | 000000B6 | PILCROW SIGN
B7 | 0000017E | LATIN SMALL LETTER Z WITH CARON
B8 | 0000017A | LATIN SMALL LETTER Z WITH ACUTE
B9 | 0000017D | LATIN CAPITAL LETTER Z WITH CARON
BA | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
BB | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE
BC | 00000160 | LATIN CAPITAL LETTER S WITH CARON
BD | 000000A8 | DIAERESIS
BE | 000000B4 | ACUTE ACCENT
BF | 000000D7 | MULTIPLICATION SIGN
not A1 being TILDE at 0000007E and A2/A3/A4/A5/A6/A7/A8/A9 just walking through s t u v w x y z like a little parade π adorable. and B5/B6 are SECTION SIGN and PILCROW SIGN β the typography girlies are fed today π
again, 8F and AF and B3 are absent from the table, that's just how it is, we're not inventing rows π
and then C0 shows up and it's uppercase o'clock, plus some very cute accented friends π
C0 | 0000007B | LEFT CURLY BRACKET
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 | 000000AD | SOFT HYPHEN
CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
CD | 00000155 | LATIN SMALL LETTER R WITH ACUTE
CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE
CF | 00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE
D0 | 0000007D | RIGHT CURLY BRACKET
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 | 0000011A | LATIN CAPITAL LETTER E WITH CARON
DB | 00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE
DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS
DD | 00000165 | LATIN SMALL LETTER T WITH CARON
DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE
DF | 0000011B | LATIN SMALL LETTER E WITH CARON
E0 | 0000005C | REVERSE SOLIDUS
E1 | 000000F7 | DIVISION 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 | 0000010F | LATIN SMALL LETTER D WITH CARON
EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
ED | 00000154 | LATIN CAPITAL LETTER R WITH ACUTE
EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
EF | 00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
okay the way C0 is LEFT CURLY BRACKET and D0 is RIGHT CURLY BRACKET and they're sitting all the way out there framing the alphabet? highkey iconic π and CA being SOFT HYPHEN right in the middle of the capital letters is such a random placement and honestly? we respect the chaos π«Ά
the table literally keeps going from here, don't go anywhere π
F0|00000030| DIGIT ZEROF1|00000031| DIGIT ONEF2|00000032| DIGIT TWOF3|00000033| DIGIT THREEF4|00000034| DIGIT FOURF5|00000035| DIGIT FIVEF6|00000036| DIGIT SIXF7|00000037| DIGIT SEVENF8|00000038| DIGIT EIGHTF9|00000039| DIGIT NINEFA|0000010E| LATIN CAPITAL LETTER D WITH CARONFB|00000170| LATIN CAPITAL LETTER U WITH DOUBLE ACUTEFC|000000DC| LATIN CAPITAL LETTER U WITH DIAERESISFD|00000164| LATIN CAPITAL LETTER T WITH CARONFE|000000DA| LATIN CAPITAL LETTER U WITH ACUTEFF|0000009F| APPLICATION PROGRAM COMMAND (APC)
okay so that's the last block of the table β <pink>digits 0 through 9</pink> chilling in F0βF9 (iconic, no notes), then a whole lil Czech/Hungarian moment with D WITH CARON, U WITH DOUBLE ACUTE, U WITH DIAERESIS, T WITH CARON and U WITH ACUTE in FAβFE β and then FF just casually drops APPLICATION PROGRAM COMMAND (APC) like it's not a whole control character sitting at the end of your digit row π that's the table bestie, we're done, we ate π
π«Ά 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!code for details!
and yes the original page really does say "details!code for details!" twice, we are not editing that, it's canon now π
π SEE ALSO π
Locale::RecodeData(3)β the data-side bestieLocale::Recode(3)β the actual recoding main characterperl(1)β the mothership π
that's the whole page fr fr, hope you understood it bestie π
page brought to you by perl v5.42.0, dated 2025-01-22, officially titled Locale:...:IBM870(3) β go forth and recode β¨ππ¦
π¦ 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