Chuyển bảng mã tiếng Việt: cứu văn bản bị lỗi font từ TCVN3, VNI, VISCII về Unicode
Công cụ nhận đoạn văn bản đang hiển thị sai, đoán bảng mã gốc rồi chuyển hai chiều giữa Unicode dựng sẵn, TCVN3 (ABC), VNI-Windows, VISCII và Unicode tổ hợp. Bảng ánh xạ phủ đủ 134 ký tự tiếng Việt có dấu ở cả chữ hoa lẫn chữ thường, nên với VNI-Windows, VISCII và Unicode tổ hợp, chuyển đi rồi chuyển về vẫn ra đúng chuỗi ban đầu; riêng TCVN3 vốn không có mã cho chữ hoa mang dấu thanh nên các chữ này quay về ở dạng chữ thường.
Tính năng nổi bật
- Nhận diện bảng mã đầu vào tự động bằng cách giải mã thử rồi chấm điểm theo cấu trúc âm tiết tiếng Việt
- Chuyển hai chiều giữa năm bảng mã: Unicode dựng sẵn, TCVN3 (ABC), VNI-Windows, VISCII, Unicode tổ hợp
- Bảng ánh xạ đầy đủ 134 ký tự tiếng Việt có dấu, gồm cả chữ hoa và chữ thường
- Xử lý chữ hoa có dấu theo đúng cách văn bản TCVN3 thật làm: dùng mã chữ thường để hiện thành chữ hoa trên phông .VnTimeH
- Nút đảo chiều lấy ngay kết quả làm đầu vào để kiểm tra chuyển ngược có ra đúng bản gốc không
- Đếm số vị trí ký tự đã thay đổi và số chữ có dấu trong kết quả để đối chiếu nhanh
- Ba đoạn văn mẫu dựng sẵn theo TCVN3, VNI-Windows và Unicode tổ hợp để thử ngay không cần tìm file
- Bảng đối chiếu mười tám ký tự hay hỏng nhất, hiện song song mã của cả năm bảng mã
Vì sao một file Word cũ mở ra lại thành TiÕng ViÖt
Máy tính không lưu chữ, nó lưu số. Bảng mã là bản thỏa thuận quy định số nào ứng với chữ nào. Trước khi Unicode phổ biến ở Việt Nam, mỗi nhóm phần mềm dùng một bản thỏa thuận riêng: cơ quan nhà nước dùng TCVN3 kèm bộ font tên bắt đầu bằng dấu chấm như .VnTime, dân làm sách và quảng cáo phía Nam dùng VNI-Windows kèm bộ font VNI-Times, còn thư điện tử đường dài dùng VISCII. Khi bạn mở một tệp lưu theo TCVN3 trên máy đang đọc mọi thứ bằng Unicode, dãy số vẫn nguyên nhưng bản thỏa thuận đã đổi, nên chữ ế bật ra thành Õ, chữ ặ thành Æ. Đây không phải hỏng dữ liệu mà là hiểu nhầm dữ liệu, và vì hiểu nhầm có quy luật nên đảo ngược được. Công cụ này làm đúng việc đảo ngược đó: dịch từng ký tự về mã Unicode tương ứng, giữ nguyên số, dấu câu, xuống dòng và mọi thứ không phải chữ tiếng Việt.
Lợi ích khi sử dụng
- Đọc lại được tài liệu lưu trữ, hợp đồng, quyết định cũ mà không phải gõ lại từ đầu
- Không cần cài bộ gõ hay phần mềm chuyển mã, mọi thứ chạy ngay trong trình duyệt
- Chuyển được cả hai chiều nên vẫn gửi được bản TCVN3 cho đối tác còn dùng hệ thống cũ
- Nhận ra ngay đoạn nào thực sự lỗi bảng mã, đoạn nào chỉ là thiếu phông chữ
- Bảng ánh xạ phủ đủ chữ hoa nên tiêu đề và tên riêng viết hoa không bị bỏ sót
Cách chuyển bảng mã cho đoạn văn bị lỗi font
- 1Bôi đen phần văn bản hiển thị sai trong file Word, Excel hay email rồi chép và dán vào ô Nội dung cần chuyển.
- 2Nhìn dòng gợi ý ngay dưới ô Bảng mã nguồn, công cụ sẽ báo nó đoán đoạn này thuộc bảng mã nào.
- 3Nếu con đoán sai, mở danh sách Bảng mã nguồn và chọn tay bảng mã đúng, kết quả cập nhật lại tức thì.
- 4Chọn Unicode dựng sẵn ở ô Bảng mã đích trong hầu hết trường hợp, đây là chuẩn mà Word, Excel và trình duyệt hiện nay đều hiểu.
- 5Bấm Chép kết quả rồi dán trở lại tài liệu, sau đó đổi phông chữ của đoạn vừa dán sang một phông Unicode như Times New Roman hoặc Arial.
Chuyện gì thực sự xảy ra khi chữ hiện ra sai
Một tệp văn bản chỉ là dãy byte. Bảng mã tám bit như TCVN3, VNI-Windows hay VISCII quy ước mỗi byte trong khoảng từ 128 đến 255 ứng với một chữ cái tiếng Việt có dấu, và mỗi bảng mã chọn cách gán khác nhau. TCVN3 đặt chữ ế ở byte 213, VNI-Windows lại không có một byte riêng cho ế mà ghép hai byte là chữ e cộng với một ký hiệu dấu, còn VISCII đặt ế ở byte 170. Khi phần mềm hiện nay đọc tệp, nó mặc định dãy byte đó là Unicode hoặc Latin-1, nên byte 213 hiện ra thành Õ chứ không thành ế. Điểm quan trọng là dữ liệu chưa mất gì cả, chỉ có bản thỏa thuận giải nghĩa bị đổi. Vì trong mỗi bảng mã, mỗi chữ có mặt trong bảng ứng với đúng một mã và ngược lại, nên chỉ cần biết tệp gốc theo bảng mã nào là dịch ngược về Unicode chính xác từng ký tự. Đó cũng là lý do với VNI-Windows, VISCII và Unicode tổ hợp, công cụ chuyển đi rồi chuyển về vẫn ra đúng chuỗi ban đầu, kể cả với những ký tự khó như ặ, ệ, ợ, ự và ỹ. Ngoại lệ duy nhất là chữ hoa mang dấu thanh trong TCVN3, vì bảng mã này không có chỗ cho chúng, phần dưới giải thích rõ.
Nhận mặt ba bảng mã cũ chỉ bằng cách nhìn đoạn chữ bị lỗi
Mỗi bảng mã để lại một kiểu dấu vết riêng, quen mắt là đoán được ngay mà chưa cần công cụ. TCVN3 cho ra chuỗi ngắn, đầy ký hiệu toán học và chữ cái Bắc Âu, kiểu TiÕng ViÖt, §Æng, Hµ Néi, häc phÝ. Đặc điểm nhận dạng chắc nhất là dấu § thay cho chữ Đ hoa và chữ µ thay cho chữ à. VNI-Windows thì ngược lại, chuỗi dài ra vì mỗi chữ có dấu chiếm hai ký tự, kiểu Tieáng Vieät, Ñaëng, Haø Noäi, hoïc phí. Nếu bạn thấy nguyên âm đi liền một ký tự lạ như ø, ù, ï, ë thì gần như chắc chắn là VNI. VISCII hiếm gặp hơn, thường nằm trong thư điện tử hoặc tệp văn bản thuần từ những năm chín mươi, cho ra chuỗi ngắn nhưng lẫn nhiều ký tự vô nghĩa vì một phần bảng mã rơi vào vùng ký tự điều khiển không hiện được. Cuối cùng, nếu chữ nhìn hoàn toàn bình thường mà tìm kiếm lại không ra, nhiều khả năng bạn đang gặp Unicode tổ hợp chứ không phải lỗi font.
Vì sao TCVN3 buộc phải có một bộ phông riêng cho chữ hoa
Bảng mã tám bit chỉ còn khoảng 94 vị trí dùng được ở nửa trên cho chữ có dấu, trong khi tiếng Việt cần 134 ký tự có dấu tính cả chữ hoa và chữ thường. Không đủ chỗ, nên TCVN3 chọn cách chỉ đặt trọn bộ chữ thường có dấu cùng bảy chữ hoa nền Ă Â Ê Ô Ơ Ư Đ vào bảng, còn các chữ hoa mang dấu thanh như À, Ấ, Ế, Ự thì không có mã riêng. Để viết được chữ hoa, người ta làm hai bộ phông song song: bộ tên kết thúc bằng chữ H như .VnTimeH vẽ hình chữ hoa ngay tại các vị trí vốn dành cho chữ thường, nên cùng một dãy byte nhưng đổi phông là chữ thường biến thành chữ hoa. Nói cách khác, trong tệp TCVN3, chữ Ế và chữ ế là cùng một byte, chỉ khác phông. Hệ quả thực tế: khi chuyển TCVN3 sang Unicode, máy không biết đoạn nào từng gán .VnTimeH, nên chữ hoa có dấu quay về thành chữ thường, ví dụ tiêu đề HÀ NỘI thành Hà NộI. Chiều ngược lại, khi bạn chuyển Unicode sang TCVN3, công cụ ghi chữ hoa có dấu bằng mã của chữ thường tương ứng, đúng cách văn bản TCVN3 thật vẫn làm; bạn cần gán phông .VnTimeH cho đoạn viết hoa để nó hiện ra đúng.
Unicode dựng sẵn và Unicode tổ hợp: hai chuỗi trông y hệt nhau nhưng máy coi là khác
Cùng một chữ ế, Unicode cho phép viết theo hai cách. Cách dựng sẵn dùng đúng một mã duy nhất cho cả chữ lẫn hai dấu, đây là cách Word, trình duyệt và hầu hết phần mềm hiện nay dùng. Cách tổ hợp theo TCVN 6909 viết chữ ê trước rồi thêm một ký tự dấu sắc đứng riêng phía sau, tổng cộng hai mã cho một chữ. Trên màn hình hai chuỗi hiện ra giống hệt, nhưng với máy tính chúng khác nhau hoàn toàn: tìm kiếm không khớp, sắp xếp lệch thứ tự, lọc trùng trong Excel bỏ sót, hàm đếm ký tự trả về số lớn hơn thực tế, và khi nhập vào cơ sở dữ liệu có giới hạn độ dài thì chuỗi bị cắt cụt. Dấu hiệu nghi ngờ điển hình là bạn gõ đúng tên nhân viên vào ô tìm kiếm mà hệ thống báo không tìm thấy, hoặc một cột trong bảng tính có ô dài bất thường. Chọn Unicode tổ hợp ở ô Bảng mã nguồn và Unicode dựng sẵn ở ô Bảng mã đích là chuẩn hóa xong.
Lỗi font, bỏ dấu và kiểu gõ là ba việc hoàn toàn khác nhau
Ba nhóm việc này hay bị gộp làm một vì đều dính tới dấu tiếng Việt, nhưng chúng giải quyết ba vấn đề tách biệt và dùng nhầm công cụ thì không ra kết quả. Trang này lo chuyện lỗi font, tức chữ hiện ra sai vì tệp lưu theo một bảng mã còn máy đọc bằng bảng mã khác. Dấu hiệu nhận biết là bạn nhìn thấy ký tự lạ như Õ, Æ, ø, § ở giữa chữ. Nếu chữ hiện ra hoàn toàn đúng nhưng bạn cần một bản không dấu để đặt tên tệp, tra cứu trong hệ thống chỉ nhận chữ Latin cơ bản hoặc nhập vào phần mềm cũ, đó là việc bỏ dấu, hãy dùng trang xóa dấu tiếng Việt tại /vi/tools/xoa-dau-tieng-viet. Còn nếu bạn muốn biết một chữ được tạo ra bằng cách bấm phím nào, hoặc cần dịch một chuỗi kiểu tieengs Vieejt về chữ có dấu, đó là chuyện kiểu gõ, hãy dùng trang telex vni converter tại /vi/tools/telex-vni-converter. Một mẹo phân biệt nhanh: lỗi font làm chữ sai hình, bỏ dấu làm chữ mất dấu nhưng vẫn đúng hình, kiểu gõ thì không đụng gì tới tệp đã lưu.
Cùng hai chữ Tiếng Việt trong bốn bảng mã trông ra sao
Cách nhanh nhất để nhận mặt bảng mã là xem cùng một cụm chữ được lưu theo từng chuẩn rồi mở bằng phần mềm đọc Unicode. Chuyển cụm Tiếng Việt bằng công cụ này sẽ thấy: TCVN3 cho ra TiÕng ViÖt, vẫn đủ mười ký tự vì mỗi chữ có dấu là một byte; VNI-Windows cho ra Tieáng Vieät, dài mười hai ký tự vì ế thành e cộng á, ệ thành e cộng ä; VISCII cho ra Tiªng Vi®t, cũng mười ký tự nhưng dùng những mã khác hẳn TCVN3; còn Unicode tổ hợp hiện ra giống hệt Tiếng Việt nhưng dài mười hai mã vì hai dấu thanh đứng riêng. Với tên riêng có chữ Đ, dấu hiệu còn rõ hơn: Đặng trong TCVN3 thành §Æng, trong VNI thành Ñaëng. Khi bạn dán một đoạn như vậy vào ô nhập, công cụ giải mã thử theo từng bảng mã rồi chấm điểm kết quả: bảng mã nào cho ra nhiều âm tiết tiếng Việt hợp lệ nhất (có phụ âm đầu, tổ hợp nguyên âm và phụ âm cuối đúng chính tả) và ít ký hiệu lạ còn sót lại nhất thì được chọn. Nhờ vậy cả ba chuỗi TiÕng ViÖt, Tieáng Vieät và Tiªng Vi®t đều được nhận đúng bảng mã.
Giới hạn của việc tự nhận diện và của chuẩn VISCII
Tự nhận diện dựa trên xác suất nên có thể đoán sai ở đoạn quá ngắn, chỉ một hai chữ, vì cùng một ký tự có thể là chữ hợp lệ ở hai bảng mã khác nhau. Ví dụ ký tự µ trong TCVN3 là à còn trong VISCII là ộ, nên chữ Nµi đứng một mình có thể đọc thành Nài hoặc Nội. Với đoạn văn từ một câu trở lên, xác suất đoán đúng cao hơn hẳn; còn khi thấy dòng gợi ý báo sai, hãy chọn tay bảng mã nguồn. VISCII có thêm một giới hạn kỹ thuật: 32 chữ hoa có dấu của nó nằm ở vùng mã 128 đến 159 và sáu chữ nằm ở vùng ký tự điều khiển dưới 32. Nếu tệp VISCII từng được mở bằng phần mềm đọc theo bảng mã Windows-1252 thay vì Latin-1, các byte ở vùng 128 đến 159 đã bị đổi thành ký hiệu như €, ‚, ƒ trước khi tới công cụ, nên những chữ hoa đó không khôi phục được và cần sửa tay. Chữ thường của VISCII không bị ảnh hưởng. Cuối cùng, văn bản trộn nhiều bảng mã trong cùng một đoạn cần được tách ra và chuyển từng phần.
Câu hỏi thường gặp (FAQ)
Vì sao mở file Word cũ chữ lại hiện thành TiÕng ViÖt?
Vì tệp được lưu theo bảng mã TCVN3 còn máy bạn đang đọc dãy byte đó bằng Unicode. Dữ liệu chưa mất, chỉ bị hiểu nhầm. Dán đoạn chữ vào công cụ, chọn nguồn TCVN3 và đích Unicode dựng sẵn là đọc lại được, sau đó nhớ đổi phông chữ của đoạn sang một phông Unicode.
Công cụ đoán sai bảng mã thì làm sao biết đúng là bảng nào?
Nhìn dấu vết đặc trưng. Có ký tự § thay cho Đ và µ thay cho à là TCVN3. Nguyên âm luôn đi kèm một ký tự lạ ngay sau như aø, eä, oá là VNI-Windows. Chữ nhìn bình thường nhưng tìm kiếm không ra là Unicode tổ hợp. Chọn tay trong ô Bảng mã nguồn rồi xem kết quả nào đọc được là biết.
Chuyển sang Unicode rồi mà chữ vẫn xấu, có phải công cụ làm sai không?
Nhiều khả năng đoạn văn đó vẫn đang gán phông .VnTime hoặc VNI-Times. Hai bộ phông này vẽ hình chữ theo bảng mã cũ nên hiển thị sai với mã Unicode. Sau khi dán kết quả trở lại, hãy bôi đen đoạn vừa dán và đổi phông sang Times New Roman, Arial hoặc Calibri.
Vì sao tiêu đề viết hoa trong file TCVN3 chuyển sang Unicode lại thành chữ thường?
Vì TCVN3 không có mã riêng cho chữ hoa mang dấu thanh. Tệp gốc lưu chữ Ế bằng đúng mã của chữ ế rồi gán phông .VnTimeH để vẽ thành chữ hoa, nên khi chuyển, công cụ chỉ thấy mã chữ thường. Chữ không dấu và bảy chữ Ă Â Ê Ô Ơ Ư Đ vẫn giữ hoa, nên HÀ NỘI thành Hà NộI. Cách sửa nhanh: chép riêng đoạn tiêu đề sang công cụ đổi kiểu chữ và chọn viết hoa toàn bộ.
Unicode dựng sẵn và Unicode tổ hợp khác nhau chỗ nào khi nhìn giống hệt?
Dựng sẵn dùng một mã cho cả chữ và dấu, tổ hợp dùng hai mã là chữ nền cộng dấu thanh đứng riêng. Màn hình hiện giống nhau nhưng máy coi là hai chuỗi khác nhau, nên tìm kiếm không khớp, lọc trùng bỏ sót và hàm đếm ký tự trả về số lớn hơn thực tế.
Cả file Word mấy chục trang thì chuyển thế nào cho nhanh?
Mở tệp, bấm chọn toàn bộ nội dung, chép rồi dán vào ô nhập của công cụ, chuyển xong chép ngược trở lại một tài liệu mới. Cách này giữ được chữ nhưng mất định dạng bảng biểu và hình ảnh, nên với tài liệu có bố cục phức tạp hãy làm theo từng phần thay vì một lần cả tệp.
Bảng mã VNI-Windows với kiểu gõ VNI có phải một không?
Không, và đây là chỗ nhầm phổ biến nhất. Bảng mã VNI-Windows là cách lưu chữ vào tệp, cho ra chuỗi kiểu Tieáng Vieät. Kiểu gõ VNI là cách bấm phím để tạo chữ, cho ra chuỗi kiểu Tie6ng1 Vie6t5. Trang này xử lý bảng mã, còn kiểu gõ thuộc về công cụ telex vni converter.
Vì sao vài ký tự ở cột VISCII không hiện được gì?
Chuẩn VISCII đặt sáu chữ Ẳ Ẵ Ẫ Ỷ Ỹ Ỵ vào vùng mã dành cho ký tự điều khiển, tức những mã vốn không có hình. Đó là đặc điểm của chuẩn từ năm 1993 chứ không phải lỗi hiển thị. Việc chuyển đổi vẫn chính xác, chỉ là mắt bạn không nhìn thấy ký tự trung gian.
Chuyển ngược từ Unicode về TCVN3 thì để làm gì?
Vẫn còn cơ quan và doanh nghiệp chạy phần mềm quản lý cũ chỉ nhận dữ liệu TCVN3, hoặc phải in bằng đúng bộ phông .VnTime để khớp mẫu văn bản đã duyệt. Chiều ngược này cũng hữu ích khi bạn cần kiểm tra một bản dịch có ra đúng chuỗi gốc hay không.
Số liệu và ký hiệu trong đoạn văn có bị công cụ đụng vào không?
Không. Công cụ chỉ thay những mã nằm trong bảng ánh xạ 134 ký tự tiếng Việt. Chữ số, dấu câu, dấu cách, ký tự xuống dòng và chữ Latin không dấu được giữ nguyên. Ô Vị trí thay đổi trong phần thống kê so từng vị trí giữa bản gốc và kết quả, nên con số chính xác khi hai bên dài bằng nhau như TCVN3 và VISCII; với VNI-Windows hay Unicode tổ hợp, mỗi chữ có dấu dài hơn một ký tự nên các vị trí phía sau bị lệch và con số chỉ mang tính tham khảo.
Dán kết quả vào Excel lại hỏng tiếp thì xử lý sao?
Excel thường hỏng vì ô đang gán phông cũ hoặc vì tệp CSV được mở với bảng mã sai. Hãy chọn cả cột và đổi phông sang một phông Unicode. Nếu bạn mở CSV, dùng chức năng nhập dữ liệu từ văn bản và chọn mã hóa UTF-8 thay vì bấm đúp mở thẳng tệp.
Trong cùng một đoạn có chữ chuyển đúng, có chữ vẫn sai là vì sao?
Thường là do đoạn đó trộn nhiều bảng mã, hay gặp khi văn bản được nhiều người soạn rồi ghép lại, hoặc trộn phông .VnTime với .VnTimeH. Cách xử lý là tách riêng từng phần đồng nhất rồi chuyển từng phần với bảng mã nguồn tương ứng thay vì chuyển cả đoạn một lần.
Chuyển Unicode sang TCVN3 để gửi đối tác, chữ hoa có dấu hiện sai thì làm sao?
TCVN3 không có mã cho chữ hoa mang dấu thanh, nên công cụ ghi các chữ này bằng mã chữ thường, giống cách văn bản TCVN3 thật vẫn làm. Ở máy đối tác, đoạn viết hoa cần được gán phông có đuôi H như .VnTimeH hoặc .VnArialH thì mới hiện thành chữ hoa; nếu để phông .VnTime thường, chữ đó sẽ hiện thành chữ thường có dấu.
Vì sao công cụ đoán sai bảng mã với đoạn chỉ có một hai chữ?
Vì nhiều ký tự là chữ hợp lệ ở cả hai bảng mã, ví dụ µ là à trong TCVN3 nhưng là ộ trong VISCII. Công cụ chấm điểm theo số âm tiết tiếng Việt hợp lệ sau khi giải mã, nên đoạn càng dài thì càng đoán chính xác. Với đoạn ngắn, hãy chọn tay bảng mã nguồn và xem kết quả nào đọc được.
Văn bản cũ có các ký tự €, ‚, ƒ lẫn trong chữ là bảng mã gì?
Thường đó là văn bản VISCII đã từng bị mở và lưu lại theo bảng mã Windows-1252, khiến các byte vốn là chữ hoa có dấu của VISCII bị đổi thành ký hiệu như €, ‚, ƒ. Chọn nguồn VISCII vẫn khôi phục được phần chữ thường, còn các chữ hoa ở vị trí những ký hiệu đó phải sửa tay vì thông tin gốc đã bị thay.
Tên tệp chép từ macOS có dấu nhưng tìm kiếm không ra, có dùng công cụ này được không?
Được. Tên tệp trên macOS thường được lưu ở dạng Unicode tổ hợp, tức chữ cái nền cộng dấu đứng riêng. Dán vào công cụ, dòng gợi ý sẽ báo Unicode tổ hợp; chọn đích Unicode dựng sẵn là chuỗi được chuẩn hóa, giữ nguyên dấu, và tìm kiếm hay lọc trùng trong Excel sẽ khớp lại.
Từ khóa liên quan
- chuyển bảng mã tiếng Việt
- sửa lỗi font tiếng Việt
- chuyển TCVN3 sang Unicode
- chuyển VNI sang Unicode
- chuyển Unicode sang TCVN3
- lỗi font TiÕng ViÖt
- lỗi font Tieáng Vieät
- convert font VnTime sang Times New Roman
- bảng mã ABC là gì
- font .VnTime lỗi
- VNI-Times chuyển Unicode
- VISCII tiếng Việt
- Unicode dựng sẵn và tổ hợp
- TCVN 6909 Unicode tổ hợp
- sửa file Word cũ bị lỗi chữ
- chuyển mã tiếng Việt online
- bảng ánh xạ ký tự tiếng Việt
- font unicode converter
- nhận diện bảng mã tiếng Việt
- sửa lỗi tiếng Việt trong Excel