Locale:...:VISCII(3)

πŸ’– Locale::RecodeData::VISCII(3) πŸ’–

Okay so welcome to the Locale::RecodeData::VISCII(3) page, bestie β€” it's from the User Contributed Perl Documentation, and it's giving very "internal module, do not perceive her" energy. Buckle up. πŸŽ€

🌸 NAME 🌸

Locale::RecodeData::VISCII β€” Conversion routines for VISCII. That's literally the whole name section, and honestly? Iconic. ✨

πŸ¦‹ SYNOPSIS πŸ¦‹

This module is internal to libintl. Do not use directly!

No cap, that's the entire synopsis. It's highkey a "do not touch" warning, and we respect it. πŸ’…

πŸŽ€ DESCRIPTION πŸŽ€

This module is generated and contains the conversion tables and routines for VISCII. Generated. Tables. Routines. We love a lowkey auto-generated queen. πŸ‘‘

And yes, the description literally contains the string =head1 CHARACTER TABLE sitting right there in it. Not me pointing out a POD artifact β€” it's just part of the text, bestie. πŸ™ˆ

The following table is sorted in the same order as the original charmap. All character codes are in hexadecimal. Please read 'ISO-10646' as 'ISO-10646-UCS4', okay? πŸ’œ

Okay so real talk β€” this next bit is the actual byte map, and it's lowkey the main character of the whole page πŸ‘‘. Every entry below is Local byte β†’ ISO-10646 codepoint β†’ what it is. Don't skip it, bestie, this is the whole personality of the encoding πŸ’…

The first chunk is giving "ASCII but make it Vietnamese" β€” you'll peep that a bunch of the slots that should be boring control characters are actually doing double duty as capital letters with hooks and tildes 😭 not me losing it over 02:

        Local | ISO-10646 | Description
       -------+-----------+-------------------------------------------------
           00 |  00000000 | NULL (NUL)
           01 |  00000001 | START OF HEADING (SOH)
           02 |  00001EB2 | LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
           03 |  00000003 | END OF TEXT (ETX)
           04 |  00000004 | END OF TRANSMISSION (EOT)
           05 |  00001EB4 | LATIN CAPITAL LETTER A WITH BREVE AND TILDE
           06 |  00001EAA | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
           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 |  00001EF6 | LATIN CAPITAL LETTER Y WITH HOOK ABOVE
           15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
           16 |  00000016 | SYNCHRONOUS IDLE (SYN)
           17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
           18 |  00000018 | CANCEL (CAN)
           19 |  00001EF8 | LATIN CAPITAL LETTER Y WITH TILDE
           1A |  0000001A | SUBSTITUTE (SUB)
           1B |  0000001B | ESCAPE (ESC)
           1C |  0000001C | FILE SEPARATOR (IS4)
           1D |  0000001D | GROUP SEPARATOR (IS3)
           1E |  00001EF4 | LATIN CAPITAL LETTER Y WITH DOT BELOW
           1F |  0000001F | UNIT SEPARATOR (IS1)
           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

fr fr the 30–39 run is just DIGIT ZERO through DIGIT NINE, extremely normal, we love a stable stretch ✨


Then 40 through 7F is literally unhinged levels of well-behaved β€” this whole block is plain ASCII, capital letters, lowercase letters, brackets, backtick, tilde, DEL, all of it exactly where you'd expect. A whole vibe check passed 🫢

        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
           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)

Okay now this is where it gets iconic πŸ‘‘. Everything from 80 up is the Vietnamese party zone β€” A WITH DOT BELOW, A WITH BREVE AND ACUTE, every circumflex-hook-tilde combo you could ever dream of, and the horn letters O WITH HORN / U WITH HORN showing up mid-block like they own the place πŸ’…

        Local | ISO-10646 | Description
       -------+-----------+-------------------------------------------------
           80 |  00001EA0 | LATIN CAPITAL LETTER A WITH DOT BELOW
           81 |  00001EAE | LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
           82 |  00001EB0 | LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
           83 |  00001EB6 | LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
           84 |  00001EA4 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
           85 |  00001EA6 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
           86 |  00001EA8 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
           87 |  00001EAC | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
           88 |  00001EBC | LATIN CAPITAL LETTER E WITH TILDE
           89 |  00001EB8 | LATIN CAPITAL LETTER E WITH DOT BELOW
           8A |  00001EBE | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
           8B |  00001EC0 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
           8C |  00001EC2 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
           8D |  00001EC4 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
           8E |  00001EC6 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
           8F |  00001ED0 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
           90 |  00001ED2 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
           91 |  00001ED4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
           92 |  00001ED6 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
           93 |  00001ED8 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
           94 |  00001EE2 | LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
           95 |  00001EDA | LATIN CAPITAL LETTER O WITH HORN AND ACUTE
           96 |  00001EDC | LATIN CAPITAL LETTER O WITH HORN AND GRAVE
           97 |  00001EDE | LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
           98 |  00001ECA | LATIN CAPITAL LETTER I WITH DOT BELOW
           99 |  00001ECE | LATIN CAPITAL LETTER O WITH HOOK ABOVE
           9A |  00001ECC | LATIN CAPITAL LETTER O WITH DOT BELOW
           9B |  00001EC8 | LATIN CAPITAL LETTER I WITH HOOK ABOVE
           9C |  00001EE6 | LATIN CAPITAL LETTER U WITH HOOK ABOVE
           9D |  00000168 | LATIN CAPITAL LETTER U WITH TILDE
           9E |  00001EE4 | LATIN CAPITAL LETTER U WITH DOT BELOW
           9F |  00001EF2 | LATIN CAPITAL LETTER Y WITH GRAVE
           A0 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
           A1 |  00001EAF | LATIN SMALL LETTER A WITH BREVE AND ACUTE
           A2 |  00001EB1 | LATIN SMALL LETTER A WITH BREVE AND GRAVE
           A3 |  00001EB7 | LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
           A4 |  00001EA5 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
           A5 |  00001EA7 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
           A6 |  00001EA9 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
           A7 |  00001EAD | LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
           A8 |  00001EBD | LATIN SMALL LETTER E WITH TILDE
           A9 |  00001EB9 | LATIN SMALL LETTER E WITH DOT BELOW
           AA |  00001EBF | LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
           AB |  00001EC1 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
           AC |  00001EC3 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
           AD |  00001EC5 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
           AE |  00001EC7 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
           AF |  00001ED1 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
           B0 |  00001ED3 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
           B1 |  00001ED5 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
           B2 |  00001ED7 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
           B3 |  00001EE0 | LATIN CAPITAL LETTER O WITH HORN AND TILDE
           B4 |  000001A0 | LATIN CAPITAL LETTER O WITH HORN
           B5 |  00001ED9 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
           B6 |  00001EDD | LATIN SMALL LETTER O WITH HORN AND GRAVE
           B7 |  00001EDF | LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
           B8 |  00001ECB | LATIN SMALL LETTER I WITH DOT BELOW
           B9 |  00001EF0 | LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
           BA |  00001EE8 | LATIN CAPITAL LETTER U WITH HORN AND ACUTE
           BB |  00001EEA | LATIN CAPITAL LETTER U WITH HORN AND GRAVE
           BC |  00001EEC | LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
           BD |  000001A1 | LATIN SMALL LETTER O WITH HORN
           BE |  00001EDB | LATIN SMALL LETTER O WITH HORN AND ACUTE
           BF |  000001AF | LATIN CAPITAL LETTER U WITH HORN

btw bestie, peep 9D β†’ 00000168 and A0 β†’ 000000D5 and B4 β†’ 000001A0 β€” those lucky few escaped the 1E00 range and are chilling in the plain Latin Extended-A / Latin-1 zone 😭 they're fine, they're just different πŸ’€


Last stretch for this part πŸŽ€ β€” from C0 to D1, where the grave/acute/circumflex/tilde legends show up in force, plus D WITH STROKE at D0 looking all mysterious:

        Local | ISO-10646 | Description
       -------+-----------+-------------------------------------------------
           C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
           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 |  00001EA2 | LATIN CAPITAL LETTER A WITH HOOK ABOVE
           C5 |  00000102 | LATIN CAPITAL LETTER A WITH BREVE
           C6 |  00001EB3 | LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
           C7 |  00001EB5 | LATIN SMALL LETTER A WITH BREVE AND TILDE
           C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
           C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
           CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
           CB |  00001EBA | LATIN CAPITAL LETTER E WITH HOOK ABOVE
           CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
           CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
           CE |  00000128 | LATIN CAPITAL LETTER I WITH TILDE
           CF |  00001EF3 | LATIN SMALL LETTER Y WITH GRAVE
           D0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
           D1 |  00001EE9 | LATIN SMALL LETTER U WITH HORN AND ACUTE
ngl the C0–C7 run is a whole personality: A grave, acute, circumflex, tilde, hook above, breve, then breves with hook above and tilde. Then C8–CF does the same tour for E, I and Y πŸ¦‹ and D0 just shows up as a stroked D like "hi I'm built different" πŸ™ˆ

and we're literally only at D1 β€” the map keeps going πŸ’–

...and the mapping table keeps going, bestie β€” same deal as before, byte on the left, codepoint on the right, zero vibes lost πŸ’…

           D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
           D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
           D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
           D5 |  00001EA1 | LATIN SMALL LETTER A WITH DOT BELOW
           D6 |  00001EF7 | LATIN SMALL LETTER Y WITH HOOK ABOVE
           D7 |  00001EEB | LATIN SMALL LETTER U WITH HORN AND GRAVE
           D8 |  00001EED | LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
           D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
           DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
           DB |  00001EF9 | LATIN SMALL LETTER Y WITH TILDE
           DC |  00001EF5 | LATIN SMALL LETTER Y WITH DOT BELOW
           DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
           DE |  00001EE1 | LATIN SMALL LETTER O WITH HORN AND TILDE
           DF |  000001B0 | LATIN SMALL LETTER U WITH HORN
           E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
           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 |  00001EA3 | LATIN SMALL LETTER A WITH HOOK ABOVE
           E5 |  00000103 | LATIN SMALL LETTER A WITH BREVE
           E6 |  00001EEF | LATIN SMALL LETTER U WITH HORN AND TILDE
           E7 |  00001EAB | LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
           E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
           E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
           EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
           EB |  00001EBB | LATIN SMALL LETTER E WITH HOOK ABOVE
           EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
           ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
           EE |  00000129 | LATIN SMALL LETTER I WITH TILDE
           EF |  00001EC9 | LATIN SMALL LETTER I WITH HOOK ABOVE
           F0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
           F1 |  00001EF1 | LATIN SMALL LETTER U WITH HORN AND DOT BELOW
           F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
           F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
           F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
           F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
           F6 |  00001ECF | LATIN SMALL LETTER O WITH HOOK ABOVE
           F7 |  00001ECD | LATIN SMALL LETTER O WITH DOT BELOW
           F8 |  00001EE5 | LATIN SMALL LETTER U WITH DOT BELOW
           F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
           FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
           FB |  00000169 | LATIN SMALL LETTER U WITH TILDE
           FC |  00001EE7 | LATIN SMALL LETTER U WITH HOOK ABOVE
           FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
           FE |  00001EE3 | LATIN SMALL LETTER O WITH HORN AND DOT BELOW
           FF |  00001EEE | LATIN CAPITAL LETTER U WITH HORN AND TILDE

And that's the whole table, start to finish β€” FF is the last one, we're done, wrap it up πŸŽ€


πŸ‘‘ AUTHOR πŸ‘‘

So, credit where credit is due, the whole thing belongs to Guido Flohr β€” here's the exact line, no edits from me:

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!

Like, all rights reserved, bestie, and if you want the full story, the source code is right there. (Yes the line repeats itself at the end β€” that's literally how it's written, I'm not touching it πŸ™ˆ)


🌈 SEE ALSO 🌈

Your little reading list, go off πŸ‘‡


That's the page, fr fr β€” courtesy of perl v5.42.0, dated 2025-01-22. Go forth and recode responsibly, ily, bye πŸ’–πŸ¦‹