Locale:..._8859_4(3)
π Locale::RecodeData::ISO_8859_4 β the manual page, bestie edition
okay so first things first: this is a Perl manpage, section 3, straight outta User Contributed Perl Documentation. The module's full name is Locale::RecodeData::ISO_8859_4 and the manpage file itself is Locale:..._8859_4(3) β yes the title got abbreviated with ellipsis, it's giving "we ran out of room on the label" β¨
πΈ NAME πΈ
Locale::RecodeData::ISO_8859_4 β literally the conversion routines for ISO-8859-4. That's the whole assignment. π
π¦ SYNOPSIS π¦
So here's the vibe check:
This module is internal to libintl. Do not use directly!
Bestie. Do not use directly. It's internal to libintl. That's it, that's the synopsis, no fancy invocation for you to copy. π
π DESCRIPTION π
This module is generated β not hand-written, it's machine-made, okay β and it contains the conversion tables and routines for ISO-8859-4. Iconic. That's what it does. π«Ά
π COMMENTS π
These comments were lifted straight out of the original charmap, no editing, no notes:
version: 1.0
source: ECMA registry
alias ISO-IR-110
alias ISO_8859-4:1988
alias ISO_8859-4
alias LATIN4
alias L4
β οΈ real talk though β please note that the aliases listed above are not necessarily valid! So don't come for me if one of them doesn't work, it literally says so right there π
π₯ CHARACTER TABLE π₯
okay so this table is sorted in the same order as the original charmap. Every single character code is in hexadecimal, no cap, all hex πΈ
And one tiny but crucial note: when you're reading the table and you see 'ISO-10646', you need to read it as 'ISO-10646-UCS4'. Like, mentally swap it in. That's the whole correction. π
(and that's where part 1 wraps, the table itself is coming up next β stay tuned bestie π)
okay so this is where the actual table lives, bestie, and it's long β so buckle up π every single row is here, hex on the left, the ISO-10646 / Unicode code point in the middle, the name on the right, nothing skipped, nothing merged, i would never π
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)
the 0x00β0x1F zone, iconic, ancient, deeply unbothered π notice how every single one has an abbreviation in parens β those are the short names, and yes you will be expected to recognise ESC, LF, CR and BEL on sight, no cap.
and then 0x20 hits and the whole vibe shifts into actual printable characters, we love a glow-up β¨
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
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
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)
see how the local byte and the ISO-10646 value are identical all the way through here? that's the whole point, bestie β this stretch is a straight one-to-one map, so 0x41 is 0x41 and everyone's happy π DELETE (DEL) at 0x7F is the last one before things get spicy.
now the 0x80β0x9F neighbourhood, and oof, we're back in control-character territory except now the ISO-10646 values still say 000000xx so they line up exactly with the local bytes πΈ
80 | 00000080 | PADDING CHARACTER (PAD)
81 | 00000081 | HIGH OCTET PRESET (HOP)
82 | 00000082 | BREAK PERMITTED HERE (BPH)
83 | 00000083 | NO BREAK HERE (NBH)
84 | 00000084 | INDEX (IND)
85 | 00000085 | NEXT LINE (NEL)
86 | 00000086 | START OF SELECTED AREA (SSA)
87 | 00000087 | END OF SELECTED AREA (ESA)
88 | 00000088 | CHARACTER TABULATION SET (HTS)
89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
8A | 0000008A | LINE TABULATION SET (VTS)
8B | 0000008B | PARTIAL LINE FORWARD (PLD)
8C | 0000008C | PARTIAL LINE BACKWARD (PLU)
8D | 0000008D | REVERSE LINE FEED (RI)
8E | 0000008E | SINGLE-SHIFT TWO (SS2)
8F | 0000008F | SINGLE-SHIFT THREE (SS3)
90 | 00000090 | DEVICE CONTROL STRING (DCS)
91 | 00000091 | PRIVATE USE ONE (PU1)
92 | 00000092 | PRIVATE USE TWO (PU2)
93 | 00000093 | SET TRANSMIT STATE (STS)
94 | 00000094 | CANCEL CHARACTER (CCH)
95 | 00000095 | MESSAGE WAITING (MW)
96 | 00000096 | START OF GUARDED AREA (SPA)
97 | 00000097 | END OF GUARDED AREA (EPA)
98 | 00000098 | START OF STRING (SOS)
99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI)
9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
9C | 0000009C | STRING TERMINATOR (ST)
9D | 0000009D | OPERATING SYSTEM COMMAND (OSC)
9E | 0000009E | PRIVACY MESSAGE (PM)
9F | 0000009F | APPLICATION PROGRAM COMMAND (APC)
these names are so dramatic for characters nobody types, and honestly? respect π«‘ the abbreviations in parens are the short forms, same deal as before.
now for the actual β¨Latin-4 momentβ¨ β 0xA0 onwards is where this charset stops being ASCII-with-extras and starts having opinions. watch the middle column, because the local byte and the ISO-10646 value split up here and start living separate lives π
A0 | 000000A0 | NO-BREAK SPACE
A1 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK
A2 | 00000138 | LATIN SMALL LETTER KRA (Greenlandic)
A3 | 00000156 | LATIN CAPITAL LETTER R WITH CEDILLA
A4 | 000000A4 | CURRENCY SIGN
A5 | 00000128 | LATIN CAPITAL LETTER I WITH TILDE
A6 | 0000013B | LATIN CAPITAL LETTER L WITH CEDILLA
A7 | 000000A7 | SECTION SIGN
A8 | 000000A8 | DIAERESIS
A9 | 00000160 | LATIN CAPITAL LETTER S WITH CARON
AA | 00000112 | LATIN CAPITAL LETTER E WITH MACRON
AB | 00000122 | LATIN CAPITAL LETTER G WITH CEDILLA
AC | 00000166 | LATIN CAPITAL LETTER T WITH STROKE
AD | 000000AD | SOFT HYPHEN
AE | 0000017D | LATIN CAPITAL LETTER Z WITH CARON
AF | 000000AF | MACRON
B0 | 000000B0 | DEGREE SIGN
B1 | 00000105 | LATIN SMALL LETTER A WITH OGONEK
B2 | 000002DB | OGONEK
B3 | 00000157 | LATIN SMALL LETTER R WITH CEDILLA
B4 | 000000B4 | ACUTE ACCENT
B5 | 00000129 | LATIN SMALL LETTER I WITH TILDE
B6 | 0000013C | LATIN SMALL LETTER L WITH CEDILLA
B7 | 000002C7 | CARON (Mandarin Chinese third tone)
B8 | 000000B8 | CEDILLA
B9 | 00000161 | LATIN SMALL LETTER S WITH CARON
BA | 00000113 | LATIN SMALL LETTER E WITH MACRON
BB | 00000123 | LATIN SMALL LETTER G WITH CEDILLA
BC | 00000167 | LATIN SMALL LETTER T WITH STROKE
BD | 0000014A | LATIN CAPITAL LETTER ENG (Sami)
BE | 0000017E | LATIN SMALL LETTER Z WITH CARON
BF | 0000014B | LATIN SMALL LETTER ENG (Sami)
C0 | 00000100 | LATIN CAPITAL LETTER A WITH MACRON
C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE
C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
C6 | 000000C6 | LATIN CAPITAL LETTER AE
C7 | 0000012E | LATIN CAPITAL LETTER I WITH OGONEK
C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON
C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
CA | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK
CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
CC | 00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE
CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE
CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
CF | 0000012A | LATIN CAPITAL LETTER I WITH MACRON
D0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE
D1 | 00000145 | LATIN CAPITAL LETTER N WITH CEDILLA
D2 | 0000014C | LATIN CAPITAL LETTER O WITH MACRON
D3 | 00000136 | LATIN CAPITAL LETTER K WITH CEDILLA
D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE
D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
D7 | 000000D7 | MULTIPLICATION SIGN
D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE
D9 | 00000172 | LATIN CAPITAL LETTER U WITH OGONEK
DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE
DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
DD | 00000168 | LATIN CAPITAL LETTER U WITH TILDE
DE | 0000016A | LATIN CAPITAL LETTER U WITH MACRON
DF | 000000DF | LATIN SMALL LETTER SHARP S (German)
E0 | 00000101 | LATIN SMALL LETTER A WITH MACRON
E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE
E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE
E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
E6 | 000000E6 | LATIN SMALL LETTER AE
few things worth clocking, bestie π 0xA2 is that Greenlandic LATIN SMALL LETTER KRA, 0xBD and 0xBF are the Sami ENG pair, 0xB7 the caron doubles as the Mandarin Chinese third tone, 0xDF is the German LATIN SMALL LETTER SHARP S, and the DIAERESIS / MACRON / ACUTE ACCENT / CEDILLA / OGONEK / CARON entries at 0xA8, 0xAF, 0xB4, 0xB8, 0xB2 and 0xB7 are the standalone combining-ish accent characters sitting right there among the letters π¦
and we're literally only at E6 β the table keeps rolling, stay with me π«Ά
E7 | 0000012F | LATIN SMALL LETTER I WITH OGONEK
E8 | 0000010D | LATIN SMALL LETTER C WITH CARON
E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE
EA | 00000119 | LATIN SMALL LETTER E WITH OGONEK
EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS
EC | 00000117 | LATIN SMALL LETTER E WITH DOT ABOVE
ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE
EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
EF | 0000012B | LATIN SMALL LETTER I WITH MACRON
F0 | 00000111 | LATIN SMALL LETTER D WITH STROKE
F1 | 00000146 | LATIN SMALL LETTER N WITH CEDILLA
F2 | 0000014D | LATIN SMALL LETTER O WITH MACRON
F3 | 00000137 | LATIN SMALL LETTER K WITH CEDILLA
F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE
F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
F7 | 000000F7 | DIVISION SIGN
F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE
F9 | 00000173 | LATIN SMALL LETTER U WITH OGONEK
FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE
FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS
FD | 00000169 | LATIN SMALL LETTER U WITH TILDE
FE | 0000016B | LATIN SMALL LETTER U WITH MACRON
FF | 000002D9 | DOT ABOVE (Mandarin Chinese light tone)
Okay bestie, that's the bottom chunk of the table right there π
from E7 all the way down to FF, and honestly? The last row ate. FF is 000002D9, which is the DOT ABOVE used for the Mandarin Chinese light tone β yes, in an ISO-8859-4 page, iconic crossover behavior, we love a multilingual queen π«Ά. And F7 is just the plain old DIVISION SIGN, no letters, no accent drama, just math doing its thing β¨.
Also can we talk about how E9 is literally 000000E9? Baby's first round trip β the byte and the codepoint match exactly, highkey satisfying π. And then F0 is 00000111 (LATIN SMALL LETTER D WITH STROKE) and F1 is 00000146 (LATIN SMALL LETTER N WITH CEDILLA) just out here living their best non-obvious lives π.
π 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!
Not me pointing out that the source page fr fr says "See the source code for details!code for details!" β yeah, the code for details! got duplicated. That's the original, verbatim, so I'm keeping it π no cap, that's genuinely what's on the page, and Guido's copyright says all rights reserved.
π SEE ALSO
Go read those next, bestie, that's the whole friend group π¦β¨
And that's a wrap on the whole page ππ This version is perl v5.42.0, dated 2025-01-22, and it's the Locale:..._8859_4(3) page from Perl's user-contributed documentation. Slay, go forth and decode your bytes responsibly π§π
π¦ 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