Locale:...:IBM865(3)
π Locale::RecodeData::IBM865(3) π
ok so picture this: it's a Perl manpage, it lives in the User Contributed Perl Documentation section of the manual (3, iykyk), and its whole entire name is Locale::RecodeData::IBM865. that's it, that's the girl. she's internal, she's generated, and she's here to do one (1) job. let's get into it π
β¨ NAME β¨
Locale::RecodeData::IBM865 β conversion routines for IBM865. literally that's her whole personality and honestly? respect. π
π¦ SYNOPSIS π¦
β οΈ ok bestie listen to me very carefully: this module is internal to libintl. Do not use directly! β οΈ
that's the whole synopsis. no flags, no arguments, no cute little usage line. just "back up, she's taken." π like a velvet rope at the club and you are NOT on the list. do not touch. periodt.
πΈ DESCRIPTION πΈ
so here's the tea: this module is generated. as in, nobody sat down and hand-wrote her β she got cooked up by a code generator, like a sourdough starter but for character encoding. π
she contains the conversion tables and the routines for IBM865. that's it. that's the whole description. tables + routines. conversion. iconic behaviour, zero notes. β¨
π¬ COMMENTS π¬
ok this is my FAVORITE part because it's literally a little time capsule π«Ά β the following comments have been extracted from the original charmap, which means they survived the whole migration just to be here with us. say thank you to the charmap:
version: 1.0
source: IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987)
alias CP865
alias 865
look at that. version: 1.0. the source is IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987) β yes, 1987, she's vintage, she's a legacy queen, she predates most of the people reading this π. and she goes by two aliases: CP865 and 865.
π¨ important caveat, do not skip this one: please note that the aliases listed above are not necessarily valid! π¨ like, they're nicknames, not legal names. do not come for me if CP865 doesn't resolve β the manpage literally warned you, i'm just the messenger π
π€ CHARACTER TABLE π€
the following table is sorted in the same order as the original charmap β so don't come in here expecting alphabetical, she's got her own internal logic and honestly? same. π
all character codes are in hexadecimal. hex. base 16. 0x-core. π₯
and one more thing, super important for the vibe check: please read ISO-10646 as ISO-10646-UCS4. that's it. that's the rule. when you see ISO-10646 in this table, your brain goes ding β ISO-10646-UCS4. don't overthink it, just trust me on this one π
(to be continued, bestie β we're only getting started π§)
okay so buckle up bestie, because this table is the whole personality of IBM865 and we're walking through every single row π
quick vibe check on how to read it: Local is the byte on your machine, ISO-10646 is the universal code point, and Description is what it actually looks like. no skimming, no skipping β we go through all of it π«Ά
β¨ CHARACTER TABLE β¨ (the main event)
first up: the control characters, 00 to 1F β the invisible girlies of the encoding. you can't see them but they are running the entire show π
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 | 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 separators doing IS4, IS3, IS2, IS1 β counting down in alphabetical order, that's so chaotic of them π and 0A LINE FEED (LF) vs 0D CARRIAGE RETURN (CR) sitting right there two rows apart, fully aware of the discourse they cause. main character energy, honestly π
next chunk, 20 to 3F: punctuation gets its moment. 20 SPACE is first because of course she is πΈ
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
30 through 39 sliding in as DIGIT ZERO to DIGIT NINE β the digits said "we travel as a group" and honestly? respect. and 3F QUESTION MARK is the last one before the letters kick in, sitting there being the moment before everything changes β¨
40 to 5F: caps o'clock π₯
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
the alphabet in one clean run, A to Z, no drama, lowkey satisfying π and then 5C REVERSE SOLIDUS shows up to be the other slash and immediately becomes everyone's problem. iykyk π
60 to 7F: lowercase era, plus the goodbye π
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)
and that's the entire plain-ASCII party wrapped by 7F DELETE (DEL) β the bouncer at the door of the seven-bit world π literally everything past this point is the extra half of the encoding and it gets so much more interesting.
now the good part π 80 to 9F is where IBM865 stops being basic and starts having flavour β accents, cedillas, and a genuinely unexpected currency moment.
80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS
82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE
83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE
86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA
88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS
8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE
8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS
8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
8D | 000000EC | LATIN SMALL LETTER I WITH GRAVE
8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
91 | 000000E6 | LATIN SMALL LETTER AE
92 | 000000C6 | LATIN CAPITAL LETTER AE
93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE
96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE
98 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
9B | 000000F8 | LATIN SMALL LETTER O WITH STROKE
9C | 000000A3 | POUND SIGN
9D | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE
9E | 000020A7 | PESETA SIGN
9F | 00000192 | LATIN SMALL LETTER F WITH HOOK
notice how 8E, 8F and 90 just casually drop three CAPITALS (A WITH DIAERESIS, A WITH RING ABOVE, E WITH ACUTE) into the middle of a lowercase run β it's giving alphabet soup, it's giving chaos, i'm obsessed π¦ and then 9E PESETA SIGN and 9F LATIN SMALL LETTER F WITH HOOK showing up like "we're here too" π queen behaviour, no notes.
A0 to AF keeps the Spanish-and-friends energy going, plus two icons:
A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE
A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE
A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE
A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE
A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE
A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE
A6 | 000000AA | FEMININE ORDINAL INDICATOR
A7 | 000000BA | MASCULINE ORDINAL INDICATOR
A8 | 000000BF | INVERTED QUESTION MARK
A9 | 00002310 | REVERSED NOT SIGN
AA | 000000AC | NOT SIGN
AB | 000000BD | VULGAR FRACTION ONE HALF
AC | 000000BC | VULGAR FRACTION ONE QUARTER
AD | 000000A1 | INVERTED EXCLAMATION MARK
AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
AF | 000000A4 | CURRENCY SIGN
A6 FEMININE ORDINAL INDICATOR and A7 MASCULINE ORDINAL INDICATOR are honestly the moment π
and A9 REVERSED NOT SIGN next to AA NOT SIGN is the "mirror mirror on the wall" of code points, fr fr. also AB VULGAR FRACTION ONE HALF and AC VULGAR FRACTION ONE QUARTER β little fractions living their best life π
and now. AND NOW. B0 onwards is the box-drawing zone and i need you to understand that this is the aesthetic. this is the blueprint. this is where terminals got their looks π₯
B0 | 00002591 | LIGHT SHADE
B1 | 00002592 | MEDIUM SHADE
B2 | 00002593 | DARK SHADE
B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL
B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL
BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL
C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT
DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
DB | 00002588 | FULL BLOCK
DC | 00002584 | LOWER HALF BLOCK
DD | 0000258C | LEFT HALF BLOCK
DE | 00002590 | RIGHT HALF BLOCK
DF | 00002580 | UPPER HALF BLOCK
look at the sheer range. B5 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE?? the detail, the craft, the specificity π every corner of every box you've ever drawn in a terminal lives right here between B0 and DF. and then the blocks roll in β DB FULL BLOCK is literally a solid filled square and it ATE π gone but not forgotten, DC LOWER HALF BLOCK, DD LEFT HALF BLOCK, DE RIGHT HALF BLOCK, DF UPPER HALF BLOCK β half blocks out here doing bar charts with zero shame π
and the very last row of this chunk:
E0 | 000003B1 | GREEK SMALL LETTER ALPHA
E0 GREEK SMALL LETTER ALPHA π the table just switches alphabets on us mid-breath and honestly? we love a cliffhanger π₯ hold that thought bestie, because the table keeps going and it is not done with us yet.
E1|000000DFβ LATIN SMALL LETTER SHARP S (German) π the Γ bestie, iconicE2|00000393β GREEK CAPITAL LETTER GAMMA πE3|000003C0β GREEK SMALL LETTER PI π₯§E4|000003A3β GREEK CAPITAL LETTER SIGMA β¨E5|000003C3β GREEK SMALL LETTER SIGMA πΈE6|000000B5β MICRO SIGN π§E7|000003C4β GREEK SMALL LETTER TAU π¦E8|000003A6β GREEK CAPITAL LETTER PHI πE9|00000398β GREEK CAPITAL LETTER THETA πEA|000003A9β GREEK CAPITAL LETTER OMEGA β the final boss letterEB|000003B4β GREEK SMALL LETTER DELTA πEC|0000221Eβ INFINITY π₯ literally endless, main character energyED|000003C6β GREEK SMALL LETTER PHI πEE|000003B5β GREEK SMALL LETTER EPSILON π«ΆEF|00002229β INTERSECTION π where the vibes overlapF0|00002261β IDENTICAL TO π twins fr frF1|000000B1β PLUS-MINUS SIGN πΈF2|00002265β GREATER-THAN OR EQUAL TO β¨F3|00002264β LESS-THAN OR EQUAL TO πF4|00002320β TOP HALF INTEGRAL π¦F5|00002321β BOTTOM HALF INTEGRAL π (yes they're a matching set, obsessed)F6|000000F7β DIVISION SIGN πF7|00002248β ALMOST EQUAL TO π almost, but not quite, iykykF8|000000B0β DEGREE SIGN βF9|00002219β BULLET OPERATOR πFA|000000B7β MIDDLE DOT πFB|0000221Aβ SQUARE ROOT π₯FC|0000207Fβ SUPERSCRIPT LATIN SMALL LETTER N π§FD|000000B2β SUPERSCRIPT TWO β¨FE|000025A0β BLACK SQUARE π€ slayFF|000000A0β NO-BREAK SPACE π the invisible icon, the space that refuses to break up with you
And that's the whole table bestie, E1 through FF, every last one accounted for. No skips, no cap. π
π AUTHOR π
Copyright info time, and we're keeping it exactly as written because we respect the paper trail:
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!
Guido Flohr made this, 2002-2017, all rights reserved β and no, the <http://www.guido-flohr.net/> link and the <mailto:guido.flohr@cantanea.com> mailto are both real, go say hi. π And yes, the source really does say details!code for details! β we don't fix it, we preserve it. It's part of the lore now. π«Ά
π SEE ALSO π
Go read these next, bestie, they're the whole ecosystem:
Locale::RecodeData(3)β the data side of the operation πLocale::Recode(3)β the actual recoding, the moment it all comes together β¨perl(1)β yes. perl itself. the mothership. π
okay that's the entire page, start to finish, and you ate every bit of it π this was Locale::...::IBM865(3) from the User Contributed Perl Documentation, perl v5.42.0, dated 2025-01-22 β jot the date down, it's giving archival icon behavior β go forth and encode responsibly, mwah π
π¦ 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