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 ZERO
  • F1 | 00000031 | DIGIT ONE
  • 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 | 0000010E | LATIN CAPITAL LETTER D WITH CARON
  • FB | 00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
  • FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
  • FD | 00000164 | LATIN CAPITAL LETTER T WITH CARON
  • FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE
  • FF | 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 🌈


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 βœ¨πŸŽ€πŸ¦‹