Locale:...:IBM861(3)
π Locale::RecodeData::IBM861(3) π
okay so bestie, real talk β this is the manual page for Locale::RecodeData::IBM861, and yes, the full header thingy is literally Locale:...:IBM861(3) on the left and Locale:...:IBM861(3) on the right, with User Contributed Perl Documentation chilling in the middle. Perl docs stay being iconic like that. π
β¨ NAME β¨
Locale::RecodeData::IBM861 β conversion routines for IBM861, and that's the whole vibe. π¦
β¨ SYNOPSIS β¨
β οΈ bestie, listen to me: this module is internal to libintl. Do not use directly! Like, do not. I'm serious. It's giving "staff only" door energy. π
β¨ DESCRIPTION β¨
So this module is generated β not hand-written, generated β and it's carrying the conversion tables and routines for IBM861. That's it, that's the whole job. πΈ
β¨ COMMENTS β¨
These comments got extracted from the original charmap, so here's the receipts, verbatim:
version: 1.0
source: IBM NLS RM Vol2 SE09-8002-01, March 1990
alias CP861
alias 861
alias CP-IS
And a heads-up, lowercase but important: please note that the aliases listed above are not necessarily valid! π«Ά Like, don't come for me if you try one and it doesn't work. π
β¨ CHARACTER TABLE β¨
The table that follows is sorted in the same order as the original charmap. All character codes are in hexadecimal, no cap. And when you see ISO-10646, please read it as ISO-10646-UCS4 β that's the actual name, it's just abbreviated for the table's convenience. β
(table coming up next β stay tuned bestie, this is a three-parter π)
...and we're straight back into it, bestie β the table keeps going, and honestly? This is where it gets good. π
π«§ the control zone, 00β1F
Okay so first up, the invisible girlies. Every single one of these maps 1:1 onto its own ISO-10646 code point β no plot twists, no drama, just the classic control characters doing their quiet little jobs:
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)
BEL at 07, BS at 08, HT at 09, LF at 0A, CR at 0D β the holy pentagon of "why does my terminal look like that". And yes, 1B is ESCAPE (ESC), the main character of every ANSI sequence you've ever pasted. π
β¨ the printable zone, 20β3F
Then it's right into the printing era. 20 is SPACE (the hardest working character in the whole table, fr fr π«Ά), and then the punctuation besties roll in:
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β39 being DIGIT ZERO through DIGIT NINE in order is so satisfying it's genuinely giving ASMR. πΈ And note that 2D is HYPHEN-MINUS, not just "hyphen" β the table is being precise with you, bestie, always read the label. π
π uppercase hours, 40β5F
40 is COMMERCIAL AT, and then it's simply the entire capital alphabet, one after another, like a little parade π:
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
5F is LOW LINE β that's the underscore to you and me, but the table stays formal. π
And 5C is REVERSE SOLIDUS, aka the backslash, aka the reason your regex cried today. π
π¦ lowercase + the big goodbye to 1:1, 60β7F
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)
7F is DELETE (DEL) and it gets to be the last one where local value == ISO-10646 value. After this? Buckle up. π’
π₯ the accented era begins, 80β9F
This is the moment the table stops being all "plain letters" and starts being international. Every local byte from here on points at a code point somewhere else in ISO-10646 β no more 1:1, and honestly the mapping is kind of iconic:
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 | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic)
8D | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
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 | 000000FE | LATIN SMALL LETTER THORN (Icelandic)
96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
97 | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
98 | 000000FD | LATIN SMALL LETTER Y WITH ACUTE
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
8B ETH (Icelandic), 8C eth (Icelandic), 8D THORN (Icelandic), and later 95 is the lowercase THORN (Icelandic) β yes the table calls out "(Icelandic)" specifically for those, and I'm obsessed. π§
Also clock 9E β 000020A7 PESETA SIGN and 9F β 00000192 LATIN SMALL LETTER F WITH HOOK. Those two are your little reminder that this block is not uniform β read each row, don't assume, iykyk. π
π accents, fractions and guillemets, A0βBF
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 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
A5 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE
A6 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
A7 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE
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 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
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
A8 INVERTED QUESTION MARK, A9 REVERSED NOT SIGN, AA NOT SIGN β three little chaos gremlins sitting right next to each other, and I love that for them. π Also AB/AC are VULGAR FRACTION ONE HALF and VULGAR FRACTION ONE QUARTER, and yes, the word "vulgar" is officially in the table, we did not make that up. π
Then B0 hits and it's BOX DRAWINGS SEASON β the shades (LIGHT SHADE, MEDIUM SHADE, DARK SHADE) and the very first BOX DRAWINGS entries. π
π the box-drawing finale, C0βDF
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
Every single one of these is a BOX DRAWINGS something-or-other, and the naming is so specific β LIGHT vs DOUBLE, SINGLE AND LEFT DOUBLE vs DOUBLE AND LEFT SINGLE, UP vs DOWN, and the order of the words genuinely flips depending on which combination it is. Do not freestyle these names. Copy them character for character or your box will look cursed. π
And DBβDF close us out with the blocks: FULL BLOCK, LOWER HALF BLOCK, LEFT HALF BLOCK, RIGHT HALF BLOCK, UPPER HALF BLOCK. π§± Half a block, but make it fashion.
Vibe check: every line above is a straight-up fact from the table β Local value on the left, ISO-10646 code point in the middle, Description on the right. No guessing, no interpolating, no "eh it's probably like EE". Read the row. π
Still going, bestie β more below. π«Ά
E0 | 000003B1 | GREEK SMALL LETTER ALPHA
E1 | 000000DF | LATIN SMALL LETTER SHARP S (German)
E2 | 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
EB | 000003B4 | GREEK SMALL LETTER DELTA
EC | 0000221E | INFINITY
ED | 000003C6 | GREEK SMALL LETTER PHI
EE | 000003B5 | GREEK SMALL LETTER EPSILON
EF | 00002229 | INTERSECTION
F0 | 00002261 | IDENTICAL TO
F1 | 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
F6 | 000000F7 | DIVISION SIGN
F7 | 00002248 | ALMOST EQUAL TO
F8 | 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
FF | 000000A0 | NO-BREAK SPACE
okay bestie, that's the whole entire table β we literally started in the 0x00's and now we're sitting at FF like it's the last slide of the presentation π«Ά and honestly? look at that back half. Greek letters everywhere β alpha, gamma, pi, two whole sigmas, tau, phi twice (one capital, one lowercase, very main character of them), theta, omega, delta, epsilon β like someone said "let's put a fraternity row in a DOS codepage" and nobody stopped them π
plus the math girlies showed up: INFINITY, INTERSECTION, IDENTICAL TO, GREATER-THAN OR EQUAL TO, LESS-THAN OR EQUAL TO, TOP HALF INTEGRAL, BOTTOM HALF INTEGRAL, DIVISION SIGN, ALMOST EQUAL TO, BULLET OPERATOR, MIDDLE DOT, SQUARE ROOT, and a SUPERSCRIPT LATIN SMALL LETTER N sitting right next to a SUPERSCRIPT TWO. scientists doing math in 1986 needed their little symbols and IBM861 said say less β¨
and then FE | 000025A0 | BLACK SQUARE living directly above FF | 000000A0 | NO-BREAK SPACE β the square is the loudest thing in the entire codepage and the no-break space is the quietest, and they're neighbors π the range of it all.
iffy detail check: no cap, every row above is character-for-character what's in the source, hex and all. don't come for me, i copied them exactly π
π 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!
so real talk β that last line has a little details!code for details! in it and honestly not me pointing it out π it's in the original, so it's staying in this version too, typos and all, because we do not edit the author block. copyright vibes, all rights reserved, respect the icon who built this β¨
π SEE ALSO
Locale::RecodeData(3)β the data side of the operation πLocale::Recode(3)β the recoding queen herself πperl(1)β yeah. that one. the whole reason we're here πͺ
okay that's the page, bestie, you made it to the very end, slay π
this beauty shipped as perl v5.42.0, dated 2025-01-22, and it's a User Contributed Perl Documentation situation β go forth and decode your Locale::...::IBM861 with confidence πΈπβ¨
π¦ 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