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 goes 96, 97, then jumps straight to 99. There's no 98 row 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 πŸ‘‘


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 πŸ’–πŸŽ€