Locale:...:CP1251(3)
π Locale::RecodeData::CP1251(3)
okay so real talk, this is the Locale::RecodeData::CP1251(3) page from the User Contributed Perl Documentation section, and it's part 1 of 3, so buckle up bestie π
β¨ NAME β¨
Locale::RecodeData::CP1251 β conversion routines for CP1251 π¦
πΈ SYNOPSIS πΈ
This module is internal to libintl. Do not use directly!
like... literally. Do not use directly! she's not kidding π
π DESCRIPTION π
This module is generated, bestie β it's not handwritten, it's auto-built β and it contains the conversion tables and routines for CP1251. that's the whole vibe. that's what she does. π
π§ COMMENTS π§
these next ones are the comments that got extracted from the original charmap, no cap, presented here in all their glory:
version: 1.0
repertoiremap: mnemonic,ds
source: UNICODE 1.0
alias MS-CYRL
and now the important disclaimer: please note that aliases listed above are not necessarily valid! π like don't come for her if MS-CYRL doesn't behave, she TOLD you. π
π CHARACTER TABLE π
quick heads-up before the table itself (which is coming in a later part, so stay tuned π):
- The following table is sorted in the same order as the original charmap. β¨
- All character codes are in hexadecimal β yes, hex, not decimal, don't @ me. π₯
- Please read
'ISO-10646'as'ISO-10646-UCS4'. like, whenever you see the short one, mentally expand it, that's the assignment. π
and that's where part 1 wraps, but we're NOT done β more parts coming, so don't go anywhere π
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)
okay bestie, first block out of the way: 00 through 1F. These are your classic control characters β the OGs, the pre-ASCII vibes. π
Notice how they all line up perfectly in the ISO-10646 column, so like every single one of these is its own literal code point. Slay. And yes, 10 is called DATALINK ESCAPE (DLE) β iconic name, no notes. π«Ά
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
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
20β3F, the ASCII punctuation-and-numbers era πΈ. SPACE at 20, then the whole squad of symbols all the way to QUESTION MARK. Note that 2D is HYPHEN-MINUS (one character, two jobs, main character energy tbh) and 2F is SOLIDUS, which is just the fancy word for a slash. iykyk. β¨
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
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 uppercase era π β COMMERCIAL AT opens it at 40 (yes, that's the @, be normal about it), then LATIN CAPITAL LETTER A through LATIN CAPITAL LETTER Z, then LEFT SQUARE BRACKET, REVERSE SOLIDUS (the backslash, bestie), RIGHT SQUARE BRACKET, CIRCUMFLEX ACCENT, and LOW LINE. All still chillin' in the same ISO-10646 positions as plain ASCII, fr fr.
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
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)
lowercase era, we love to see it π β wait, peach π β starts at 60 with GRAVE ACCENT, then LATIN SMALL LETTER A through LATIN SMALL LETTER Z, then LEFT CURLY BRACKET, VERTICAL LINE, RIGHT CURLY BRACKET, TILDE, and closing out the plain-ASCII half with 7F = DELETE (DEL). Fun little detail: < is LESS-THAN SIGN up at 3C while > is GREATER-THAN SIGN at 3E β the duo ate. π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
80 | 00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
81 | 00000403 | CYRILLIC CAPITAL LETTER GJE
82 | 0000201A | SINGLE LOW-9 QUOTATION MARK
83 | 00000453 | CYRILLIC SMALL LETTER GJE
84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK
85 | 00002026 | HORIZONTAL ELLIPSIS
86 | 00002020 | DAGGER
87 | 00002021 | DOUBLE DAGGER
88 | 000020AC | EURO SIGN
89 | 00002030 | PER MILLE SIGN
8A | 00000409 | CYRILLIC CAPITAL LETTER LJE
8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
8C | 0000040A | CYRILLIC CAPITAL LETTER NJE
8D | 0000040C | CYRILLIC CAPITAL LETTER KJE
8E | 0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
8F | 0000040F | CYRILLIC CAPITAL LETTER DZHE
90 | 00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian)
91 | 00002018 | LEFT SINGLE QUOTATION MARK
92 | 00002019 | RIGHT SINGLE QUOTATION MARK
93 | 0000201C | LEFT DOUBLE QUOTATION MARK
94 | 0000201D | RIGHT DOUBLE QUOTATION MARK
95 | 00002022 | BULLET
96 | 00002013 | EN DASH
97 | 00002014 | EM DASH
99 | 00002122 | TRADE MARK SIGN
9A | 00000459 | CYRILLIC SMALL LETTER LJE
9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
9C | 0000045A | CYRILLIC SMALL LETTER NJE
9D | 0000045C | CYRILLIC SMALL LETTER KJE
9E | 0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian)
9F | 0000045F | CYRILLIC SMALL LETTER DZHE
okay this is where it gets SPICY π₯ β 80 onward is where CP1251 stops being boring ASCII and starts being its true Cyrillic self. Heads up though: the Local column and the ISO-10646 column stop matching here, because these bytes map to code points way up in the Unicode range (like 00000402, 0000201A, and friends). Not me pointing out that 82 is a SINGLE LOW-9 QUOTATION MARK sitting between two Cyrillic letters π the chaos. Also 88? EURO SIGN. πΆ Periodt.
π bestie look closely β the listing goes96,97, then jumps straight to99. There's no98row in this table. That's just how the page is laid out, so don't come for me, I'm reporting it exactly as it is.
Also can we appreciate 86 DAGGER and 87 DOUBLE DAGGER β they understood the assignment. π‘οΈ And the little (Serbocroatian) notes on 80, 8E, and 90? Keep those, they're literally in the source, iykyk. π¦
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
A0 | 000000A0 | NO-BREAK SPACE
A1 | 0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
A2 | 0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian)
A3 | 00000408 | CYRILLIC CAPITAL LETTER JE
A4 | 000000A4 | CURRENCY SIGN
A5 | 00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN
A6 | 000000A6 | BROKEN BAR
A7 | 000000A7 | SECTION SIGN
A8 | 00000401 | CYRILLIC CAPITAL LETTER IO
A9 | 000000A9 | COPYRIGHT SIGN
AA | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
AC | 000000AC | NOT SIGN
AD | 000000AD | SOFT HYPHEN
AE | 000000AE | REGISTERED SIGN
AF | 00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
B0 | 000000B0 | DEGREE SIGN
B1 | 000000B1 | PLUS-MINUS SIGN
B2 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
B3 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
B4 | 00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
B5 | 000000B5 | MICRO SIGN
B6 | 000000B6 | PILCROW SIGN
B7 | 000000B7 | MIDDLE DOT
B8 | 00000451 | CYRILLIC SMALL LETTER IO
B9 | 00002116 | NUMERO SIGN
BA | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
BC | 00000458 | CYRILLIC SMALL LETTER JE
BD | 00000405 | CYRILLIC CAPITAL LETTER DZE
BE | 00000455 | CYRILLIC SMALL LETTER DZE
BF | 00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
the A0βBF block, and it's giving bilingual icon β¨ β like it ping-pongs between punctuation (NO-BREAK SPACE, CURRENCY SIGN, BROKEN BAR, SECTION SIGN, COPYRIGHT SIGN, NOT SIGN, SOFT HYPHEN, REGISTERED SIGN, DEGREE SIGN, PLUS-MINUS SIGN, MICRO SIGN, PILCROW SIGN, MIDDLE DOT) and Cyrillic letters, and the parenthetical tags are doing a whole world tour: (Byelorussian) on A1 and A2, (Ukrainian) on AF and BF. π Also A5 and B4 are the same letter in two cases, GHE WITH UPTURN, and A8/B8 are the IO pair β uppercase then lowercase, cute. And A9 is literally just the COPYRIGHT SIGN β respect the legal girlies. π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
C0 | 00000410 | CYRILLIC CAPITAL LETTER A
C1 | 00000411 | CYRILLIC CAPITAL LETTER BE
C2 | 00000412 | CYRILLIC CAPITAL LETTER VE
C3 | 00000413 | CYRILLIC CAPITAL LETTER GHE
C4 | 00000414 | CYRILLIC CAPITAL LETTER DE
C5 | 00000415 | CYRILLIC CAPITAL LETTER IE
C6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE
C7 | 00000417 | CYRILLIC CAPITAL LETTER ZE
C8 | 00000418 | CYRILLIC CAPITAL LETTER I
C9 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I
CA | 0000041A | CYRILLIC CAPITAL LETTER KA
CB | 0000041B | CYRILLIC CAPITAL LETTER EL
CC | 0000041C | CYRILLIC CAPITAL LETTER EM
CD | 0000041D | CYRILLIC CAPITAL LETTER EN
CE | 0000041E | CYRILLIC CAPITAL LETTER O
CF | 0000041F | CYRILLIC CAPITAL LETTER PE
D0 | 00000420 | CYRILLIC CAPITAL LETTER ER
D1 | 00000421 | CYRILLIC CAPITAL LETTER ES
D2 | 00000422 | CYRILLIC CAPITAL LETTER TE
D3 | 00000423 | CYRILLIC CAPITAL LETTER U
D4 | 00000424 | CYRILLIC CAPITAL LETTER EF
D5 | 00000425 | CYRILLIC CAPITAL LETTER HA
D6 | 00000426 | CYRILLIC CAPITAL LETTER TSE
D7 | 00000427 | CYRILLIC CAPITAL LETTER CHE
D8 | 00000428 | CYRILLIC CAPITAL LETTER SHA
D9 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA
DA | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
DB | 0000042B | CYRILLIC CAPITAL LETTER YERU
DC | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
DD | 0000042D | CYRILLIC CAPITAL LETTER E
DE | 0000042E | CYRILLIC CAPITAL LETTER YU
DF | 0000042F | CYRILLIC CAPITAL LETTER YA
THE CYRILLIC ALPHABET BLOCK π β C0 through DF, one capital letter per byte, in order. This is the part that's lowkey satisfying to scroll through because it's justβ¦ so tidy. Notice how the ISO-10646 column marches up 00000410 β 0000042F in perfect step, one at a time. No gaps, no drama, just vibes. And yes, the names are the transliterated letter names: BE, VE, GHE, DE, IE, ZHE, ZE, I, SHORT I, KA, EL, EM, EN, O, PE, ER, ES, TE, U, EF, HA, TSE, CHE, SHA, SHCHA, HARD SIGN, YERU, SOFT SIGN, E, YU, YA. she ate and left no crumbs π π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
E0 | 00000430 | CYRILLIC SMALL LETTER A
E1 | 00000431 | CYRILLIC SMALL LETTER BE
E2 | 00000432 | CYRILLIC SMALL LETTER VE
E3 | 00000433 | CYRILLIC SMALL LETTER GHE
E4 | 00000434 | CYRILLIC SMALL LETTER DE
E5 | 00000435 | CYRILLIC SMALL LETTER IE
E6 | 00000436 | CYRILLIC SMALL LETTER ZHE
E7 | 00000437 | CYRILLIC SMALL LETTER ZE
E8 | 00000438 | CYRILLIC SMALL LETTER I
E9 | 00000439 | CYRILLIC SMALL LETTER SHORT I
EA | 0000043A | CYRILLIC SMALL LETTER KA
EB | 0000043B | CYRILLIC SMALL LETTER EL
EC | 0000043C | CYRILLIC SMALL LETTER EM
ED | 0000043D | CYRILLIC SMALL LETTER EN
and here's the lowercase mirror πͺ β E0 starts CYRILLIC SMALL LETTER A and it just keeps going: BE, VE, GHE, DE, IE, ZHE, ZE, I, SHORT I, KA, EL, EM, EN β and this part of the page ends right there at ED with CYRILLIC SMALL LETTER EN, so don't panic, the rest is coming in the next chunk bestie π«Άβ¨
EE | 0000043E | CYRILLIC SMALL LETTER O
EF | 0000043F | CYRILLIC SMALL LETTER PE
F0 | 00000440 | CYRILLIC SMALL LETTER ER
F1 | 00000441 | CYRILLIC SMALL LETTER ES
F2 | 00000442 | CYRILLIC SMALL LETTER TE
F3 | 00000443 | CYRILLIC SMALL LETTER U
F4 | 00000444 | CYRILLIC SMALL LETTER EF
F5 | 00000445 | CYRILLIC SMALL LETTER HA
F6 | 00000446 | CYRILLIC SMALL LETTER TSE
F7 | 00000447 | CYRILLIC SMALL LETTER CHE
F8 | 00000448 | CYRILLIC SMALL LETTER SHA
F9 | 00000449 | CYRILLIC SMALL LETTER SHCHA
FA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN
FB | 0000044B | CYRILLIC SMALL LETTER YERU
FC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN
FD | 0000044D | CYRILLIC SMALL LETTER E
FE | 0000044E | CYRILLIC SMALL LETTER YU
FF | 0000044F | CYRILLIC SMALL LETTER YA
and that's the whole rest of the table, bestie π like, we literally went from 00 all the way to FF, every single byte accounted for, no crumbs left, we ate and left no evidence β¨
πΈ AUTHOR πΈ
Copyright (C) 2002-2017 Guido Flohr <http://www.guido-flohr.net/> (<mailto:guido.flohr@cantanea.com>), all rights reserved. π
and then it says β and I'm quoting this exactly because the manpage really did this, no cap β See the source code for details!code for details! ππ the little !code for details! echo at the end is giving copy-paste moment and honestly? iconic. we stan a typo that survived the release. go read the source for the full tea π«
π SEE ALSO π
Locale::RecodeData(3)β the data-side bestie πLocale::Recode(3)β the actual recoding main character πperl(1)β yes. perl. the whole entire language. go say hi πͺ
okay that's the page, you're officially fluent in CP1251 lore now, go forth and recode responsibly π¦β¨ this gem dropped as perl v5.42.0, dated 2025-01-22, and it lives at Locale:...:CP1251(3) β mwah, bye bestie ππ
π¦ 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