Unicode và mã hóa ký tự cũ của Việt Nam

Hôm nay, trong quá trình làm một cái tool import dữ liệu từ Exel vào Database. Mình gặp file nó viế bằng mã TCVN3

Và cái font gì cả biết nữa :v

Đang tính viết function convert encoding dựa trên cái này

Unicode & Vietnamese Legacy Character Encodings

Viet Unicode
Hex
VNI VNI
Hex
VPS VPS
Hex
VISCII VISCII
Hex
TCVN3 TCVN3
Hex
VIQR English Name
À U+00C0 41 D8 80 À C0 41 B5 A LATIN CAPITAL LETTER A WITH GRAVE
Á U+00C1 41 D9 Á C1 Á C1 41 B8 A' LATIN CAPITAL LETTER A WITH ACUTE
 U+00C2 41 C2  C2  C2 ¢ A2 A^ LATIN CAPITAL LETTER A WITH CIRCUMFLEX
à U+00C3 41 D5 82 à C3 41 B7 A~ LATIN CAPITAL LETTER A WITH TILDE
È U+00C8 45 D8 × D7 È C8 45 CC E LATIN CAPITAL LETTER E WITH GRAVE
É U+00C9 45 D9 É C9 É C9 45 D0 E’ LATIN CAPITAL LETTER E WITH ACUTE
Ê U+00CA 45 C2 Ê CA Ê CA £ A3 E^ LATIN CAPITAL LETTER E WITH CIRCUMFLEX
Ì U+00CC Ì CC µ B5 Ì CC 49 D7 I LATIN CAPITAL LETTER I WITH GRAVE
Í U+00CD Í CD ´ B4 Í CD 49 DD I' LATIN CAPITAL LETTER I WITH ACUTE
Ò U+00D2 4F D8 ¼ BC Ò D2 4F DF O LATIN CAPITAL LETTER O WITH GRAVE
Ó U+00D3 4F D9 ¹ B9 Ó D3 4F E3 O’ LATIN CAPITAL LETTER O WITH ACUTE
Ô U+00D4 4F C2 Ô D4 Ô D4 ¤ A4 O^ LATIN CAPITAL LETTER O WITH CIRCUMFLEX
Õ U+00D5 4F D5 ¾ BE   A0 4F E2 O~ LATIN CAPITAL LETTER O WITH TILDE
Ù U+00D9 55 D8 ¨ A8 Ù D9 55 EF U LATIN CAPITAL LETTER U WITH GRAVE
Ú U+00DA 55 D9 Ú DA Ú DA 55 F3 U' LATIN CAPITAL LETTER U WITH ACUTE
Ý U+00DD 59 D9 Ý DD Ý DD 59 FD Y' LATIN CAPITAL LETTER Y WITH ACUTE
à U+00E0 61 F8 à E0 à E0 µ B5 a LATIN SMALL LETTER A WITH GRAVE
á U+00E1 61 F9 á E1 á E1 ¸ B8 a’ LATIN SMALL LETTER A WITH ACUTE
â U+00E2 61 E2 â E2 â E2 © A9 a^ LATIN SMALL LETTER A WITH CIRCUMFLEX
ã U+00E3 61 F5 ã E3 ã E3 · B7 a~ LATIN SMALL LETTER A WITH TILDE
è U+00E8 65 F8 è E8 è E8 Ì CC e LATIN SMALL LETTER E WITH GRAVE
é U+00E9 65 F9 é E9 é E9 Ð D0 e' LATIN SMALL LETTER E WITH ACUTE
ê U+00EA 65 E2 ê EA ê EA ª AA e^ LATIN SMALL LETTER E WITH CIRCUMFLEX
ì U+00EC ì EC ì EC ì EC × D7 i LATIN SMALL LETTER I WITH GRAVE
í U+00ED í ED í ED í ED Ý DD i’ LATIN SMALL LETTER I WITH ACUTE
ò U+00F2 6F F8 ò F2 ò F2 ß DF o LATIN SMALL LETTER O WITH GRAVE
ó U+00F3 6F F9 ó F3 ó F3 ã E3 o' LATIN SMALL LETTER O WITH ACUTE
ô U+00F4 6F E2 ô F4 ô F4 « AB o^ LATIN SMALL LETTER O WITH CIRCUMFLEX
õ U+00F5 6F F5 õ F5 õ F5 â E2 o~ LATIN SMALL LETTER O WITH TILDE
ù U+00F9 75 F8 ù F9 ù F9 ï EF u LATIN SMALL LETTER U WITH GRAVE
ú U+00FA 75 F9 ú FA ú FA ó F3 u’ LATIN SMALL LETTER U WITH ACUTE
ý U+00FD 79 F9 š 9A ý FD ý FD y’ LATIN SMALL LETTER Y WITH ACUTE
Ă U+0102 41 CA ˆ 88 Å C5 ¡ A1 A( LATIN CAPITAL LETTER A WITH BREVE
ă U+0103 61 EA æ E6 å E5 ¨ A8 a( LATIN SMALL LETTER A WITH BREVE
Đ U+0110 Ñ D1 ñ F1 Ð D0 § A7 DD LATIN CAPITAL LETTER D WITH STROKE
đ U+0111 ñ F1 Ç C7 ð F0 ® AE dd LATIN SMALL LETTER D WITH STROKE
Ĩ U+0128 Ó D3 ¸ B8 Î CE 49 DC I~ LATIN CAPITAL LETTER I WITH TILDE
ĩ U+0129 ó F3 ï EF î EE Ü DC i~ LATIN SMALL LETTER I WITH TILDE
Ũ U+0168 55 D5 ¬ AC  9D 55 F2 U~ LATIN CAPITAL LETTER U WITH TILDE
ũ U+0169 75 F5 Û DB û FB ò F2 u~ LATIN SMALL LETTER U WITH TILDE
Ơ U+01A0 Ô D4 ÷ F7 ´ B4 ¥ A5 O+ LATIN CAPITAL LETTER O WITH HORN
ơ U+01A1 ô F4 Ö D6 ½ BD ¬ AC o+ LATIN SMALL LETTER O WITH HORN
Ư U+01AF Ö D6 Ð D0 ¿ BF ¦ A6 U+ LATIN CAPITAL LETTER U WITH HORN
ư U+01B0 ö F6 Ü DC ß DF AD u+ LATIN SMALL LETTER U WITH HORN
U+1EA0 41 CF [1] 02 80 41 B9 A. LATIN CAPITAL LETTER A WITH DOT BELOW
U+1EA1 61 EF å E5 Õ D5 ¹ B9 a. LATIN SMALL LETTER A WITH DOT BELOW
U+1EA2 41 DB  81 Ä C4 41 B6 A? LATIN CAPITAL LETTER A WITH HOOK ABOVE
U+1EA3 61 FB ä E4 ä E4 B6 a? LATIN SMALL LETTER A WITH HOOK ABOVE
U+1EA4 41 C1 ƒ 83 84 ¢Ê A2 CA A^’ LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
U+1EA5 61 E1 Ã C3 ¤ A4 Ê CA a^’ LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
U+1EA6 41 C0 84 85 ¢Ç A2 C7 A^ LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
U+1EA7 61 E0 À C0 ¥ A5 Ç C7 a^ LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
U+1EA8 41 C5 85 86 ¢È A2 C8 A^? LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
U+1EA9 61 E5 Ä C4 ¦ A6 È C8 a^? LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
U+1EAA 41 C3  1C  06 ¢É A2 C9 A^~ LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
U+1EAB 61 E3 Å C5 ç E7 É C9 a^~ LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
U+1EAC 41 C4
03 87 ¢Ë A2 CB A^. LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
U+1EAD 61 E4 Æ C6 § A7 Ë CB a^. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
U+1EAE 41 C9  8D  81 ¡¾ A1 BE A(‘ LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
U+1EAF 61 E9 ¡ A1 ¡ A1 ¾ BE a(‘ LATIN SMALL LETTER A WITH BREVE AND ACUTE
U+1EB0 41 C8 Ž 8E 82 ¡» A1 BB A( LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
U+1EB1 61 E8 ¢ A2 ¢ A2 » BB a( LATIN SMALL LETTER A WITH BREVE AND GRAVE
U+1EB2 41 DA  8F [1] 02 ¡¼ A1 BC A(? LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
U+1EB3 61 FA £ A3 Æ C6 ¼ BC a(? LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
U+1EB4 41 DC ð F0 05 ¡½ A1 BD A(~ LATIN CAPITAL LETTER A WITH BREVE AND TILDE
U+1EB5 61 FC ¤ A4 Ç C7 ½ BD a(~ LATIN SMALL LETTER A WITH BREVE AND TILDE
U+1EB6 41 CB
04 ƒ 83 ¡Æ A1 C6 A(. LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
U+1EB7 61 EB ¥ A5 £ A3 Æ C6 a(. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
U+1EB8 45 CF 05 89 45 D1 E. LATIN CAPITAL LETTER E WITH DOT BELOW
U+1EB9 65 EF Ë CB © A9 Ñ D1 e. LATIN SMALL LETTER E WITH DOT BELOW
U+1EBA 45 DB Þ DE Ë CB 45 CE E? LATIN CAPITAL LETTER E WITH HOOK ABOVE
U+1EBB 65 FB È C8 ë EB Î CE e? LATIN SMALL LETTER E WITH HOOK ABOVE
U+1EBC 45 D5 þ FE ˆ 88 45 CF E~ LATIN CAPITAL LETTER E WITH TILDE
U+1EBD 65 F5 ë EB ¨ A8 Ï CF e~ LATIN SMALL LETTER E WITH TILDE
U+1EBE 45 C1  90 Š 8A £Õ A3 D5 E^’ LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
ế U+1EBF 65 E1 89 ª AA Õ D5 e^’ LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
U+1EC0 45 C0 93 8B £Ò A3 D2 E^ LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
U+1EC1 65 E0 Š 8A « AB Ò D2 e^ LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
U+1EC2 45 C5 94 Œ 8C £Ó A3 D3 E^? LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
U+1EC3 65 E5 8B ¬ AC Ó D3 e^? LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
U+1EC4 45 C3 95  8D £Ô A3 D4 E^~ LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
U+1EC5 65 E3 Í CD AD Ô D4 e^~ LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
U+1EC6 45 C4  06 Ž 8E £Ö A3 D6 E^. LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
U+1EC7 65 E4 Œ 8C ® AE Ö D6 e^. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
U+1EC8 Æ C6 · B7 9B 49 D8 I? LATIN CAPITAL LETTER I WITH HOOK ABOVE
U+1EC9 æ E6 Ì CC ï EF Ø D8 i? LATIN SMALL LETTER I WITH HOOK ABOVE
U+1ECA Ò D2 10 ˜ 98 49 DE I. LATIN CAPITAL LETTER I WITH DOT BELOW
U+1ECB ò F2 Î CE ¸ B8 Þ DE i. LATIN SMALL LETTER I WITH DOT BELOW
U+1ECC 4F CF  11 š 9A 4F E4 O. LATIN CAPITAL LETTER O WITH DOT BELOW
U+1ECD 6F EF 86 ÷ F7 ä E4 o. LATIN SMALL LETTER O WITH DOT BELOW
U+1ECE 4F DB ½ BD 99 4F E1 O? LATIN CAPITAL LETTER O WITH HOOK ABOVE
U+1ECF 6F FB Õ D5 ö F6 á E1 o? LATIN SMALL LETTER O WITH HOOK ABOVE
U+1ED0 4F C1 96  8F ¤è A4 E8 O^’ LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
U+1ED1 6F E1 Ó D3 ¯ AF è E8 o^’ LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
U+1ED2 4F C0 97  90 ¤å A4 E5 O^ LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
U+1ED3 6F E0 Ò D2 ° B0 å E5 o^ LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
U+1ED4 4F C5 ˜ 98 91 ¤æ A4 E6 O^? LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
U+1ED5 6F E5 ° B0 ± B1 æ E6 o^? LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
U+1ED6 4F C3 99 92 ¤ç A4 E7 O^~ LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
U+1ED7 6F E3 87 ² B2 ç E7 o^~ LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
U+1ED8 4F C4  12 93 ¤é A4 E9 O^. LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
U+1ED9 6F E4 B6 µ B5 é E9 o^. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
U+1EDA ÔÙ D4 D9  9D 95 ¥í A5 ED O+’ LATIN CAPITAL LETTER O WITH HORN AND ACUTE
U+1EDB ôù F4 F9 § A7 ¾ BE í ED o+’ LATIN SMALL LETTER O WITH HORN AND ACUTE
U+1EDC ÔØ D4 D8 ž 9E 96 ¥ê A5 EA O+ LATIN CAPITAL LETTER O WITH HORN AND GRAVE
U+1EDD ôø F4 F8 © A9 B6 ê EA o+ LATIN SMALL LETTER O WITH HORN AND GRAVE
U+1EDE ÔÛ D4 DB Ÿ 9F 97 ¥ë A5 EB O+? LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
U+1EDF ôû F4 FB ª AA · B7 ë EB o+? LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
U+1EE0 ÔÕ D4 D5 ¦ A6 ³ B3 ¥ì A5 EC O+~ LATIN CAPITAL LETTER O WITH HORN AND TILDE
U+1EE1 ôõ F4 F5 « AB Þ DE ì EC o+~ LATIN SMALL LETTER O WITH HORN AND TILDE
U+1EE2 ÔÏ D4 CF  13 94 ¥î A5 EE O+. LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
U+1EE3 ôï F4 EF ® AE þ FE î EE o+. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
U+1EE4 55 CF  14 ž 9E 55 F4 U. LATIN CAPITAL LETTER U WITH DOT BELOW
U+1EE5 75 EF ø F8 ø F8 ô F4 u. LATIN SMALL LETTER U WITH DOT BELOW
U+1EE6 55 DB Ñ D1 œ 9C 55 F1 U? LATIN CAPITAL LETTER U WITH HOOK ABOVE
U+1EE7 75 FB û FB ü FC ñ F1 u? LATIN SMALL LETTER U WITH HOOK ABOVE
U+1EE8 ÖÙ D6 D9 AD º BA ¦ø A6 F8 U+’ LATIN CAPITAL LETTER U WITH HORN AND ACUTE
U+1EE9 öù F6 F9 Ù D9 Ñ D1 ø F8 u+’ LATIN SMALL LETTER U WITH HORN AND ACUTE
U+1EEA ÖØ D6 D8 ¯ AF » BB ¦õ A6 F5 U+ LATIN CAPITAL LETTER U WITH HORN AND GRAVE
U+1EEB öø F6 F8 Ø D8 × D7 õ F5 u+ LATIN SMALL LETTER U WITH HORN AND GRAVE
U+1EEC ÖÛ D6 DB ± B1 ¼ BC ¦ö A6 F6 U+? LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
U+1EED öû F6 FB º BA Ø D8 ö F6 u+? LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
U+1EEE ÖÕ D6 D5 1D ÿ FF ¦÷ A6 F7 U+~ LATIN CAPITAL LETTER U WITH HORN AND TILDE
U+1EEF öõ F6 F5 » BB æ E6 ÷ F7 u+~ LATIN SMALL LETTER U WITH HORN AND TILDE
U+1EF0 ÖÏ D6 CF  15 ¹ B9 ¦ù A6 F9 U+. LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
U+1EF1 öï F6 EF ¿ BF ñ F1 ù F9 u+. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
U+1EF2 59 D8 ² B2 Ÿ 9F 59 FA Y LATIN CAPITAL LETTER Y WITH GRAVE
U+1EF3 79 F8 ÿ FF Ï CF ú FA y LATIN SMALL LETTER Y WITH GRAVE
U+1EF4 Î CE 19 1E 59 FE Y. LATIN CAPITAL LETTER Y WITH DOT BELOW
U+1EF5 î EE œ 9C Ü DC þ FE y. LATIN SMALL LETTER Y WITH DOT BELOW
U+1EF6 59 DB ý FD  14 59 FB Y? LATIN CAPITAL LETTER Y WITH HOOK ABOVE
U+1EF7 79 FB 9B Ö D6 û FB y? LATIN SMALL LETTER Y WITH HOOK ABOVE
U+1EF8 59 D5 ³ B3 19 59 FC Y~ LATIN CAPITAL LETTER Y WITH TILDE
U+1EF9 79 F5 Ï CF Û DB ü FC y~ LATIN SMALL LETTER Y WITH TILDE

The Vietnamese alphabets are listed in several noncontiguous Unicode ranges: Basic Latin {U+0000..U+007F}, Latin-1 Supplement {U+0080..U+00FF}, Latin Extended-A, -B {U+0100..U+024F}, Latin Extended Additional {U+1E00..U+1EFF}, and Combining Diacritical Marks {U+0300.. U+036F}. The Vietnamese đồng currency symbol is ₫ (U+20AB).

VIQR (VIetnamese Quoted-Readable) is a 7-bit ASCII-based typing convention. VNI, VPS, VISCII, CP1258, and TCVN3 (Vietnam’s standard) encodings are all based on an 8-bit character set similar to the Latin-1 ANSI character set; VNI uses two bytes for encoding, however. TCVN3 is not double-byte, but due to the nature of its encoding, capital letters (vowels) are mapped to a separate, capital font that is similar to the normal, lowercase one. As such, the hex code and character representation of TCVN3 capital letters in the table is not correct—it is shown here for the purpose of illustration. Users must take this peculiarity into account when converting files in TCVN3 format to Unicode; some post-conversion editing is necessary. Followed are some useful links:

http://vietunicode.sourceforge.net/charset/

Thì bất ngờ tìm được cái thư viện do bạn Nguyen Van Anh làm sẵn trên GitHub. Thế là down về dùng thôi

https://github.com/anhskohbo
https://github.com/anhskohbo

Thư viện tên là Uconvert

UConvert

Giới thiệu

UConvert hiện tại cho phép bạn chuyển đổi qua lại giữa các bảng mã của tiếng Việt. Hiện tại hỗ trợ 4 bảng mã:

  • UNICODE
  • VNI
  • TCVN3
  • VIQR

Sẽ sớm hỗ trợ các bảng mã còn lại trong tương lai.

https://github.com/anhskohbo/u-convert


Cách sử dụng thư viện Convert Font PHP – UConvert

Nhúng nó vào nơi bạn cần sử dụng:

Sử dụng

Quy chuẩn về tên bảng mã

Trước khi vào phần sử dụng bạn cần biết tên chuẩn của các bảng mã mà UConvert sử dụng.

Tất cả các tên bảng mã đều phải viết HOA và liền không dấu. Ví dụ UNICODEVNITCVN3VIQR

Trong lớp Anhskohbo\UConvert\UConvert một số hằng được khai báo giúp bạn nhất quán trong việc gọi tên bảng mã:

Khởi tạo thông thường

UConvert cung cấp một cách rất dễ dàng để sử dụng, hãy xem một ví dụ:

Construct của UConvert chấp nhận 2 đối số:

Anhskohbo\UConvert\UConvert( string $text, string $character)

$text: Nội dung bạn muốn chuyển đổi.

$character: Tên bảng mã hiện tại của nó.

Sau khi khởi tạo bạn cần gọi method transform(string $toCharacter) với tham số là tên bảng mã cần chuyển đến để chuyển nó sang bảng mã cuối.

Gọi trực tiếp qua static.

Ngoài ra thay vì phải khởi tạo lớp, UConvert cho phéo bạn gọi trực tiếp tới một số static-method đặc biệt chuyển đổi.

Những static-method đặc biệt là: to + tên bảng mã sẵn có (trong hệ thống) viết liền và viết hoa chữ cái đầu.

Dưới đây là một ví dụ gọi trực tiếp kiểu static:

-soiqualang_chentreu-