Tôi gõ tiếng Việt gần như cả đời trên những bàn phím không in lấy một chữ cái tiếng Việt nào. Gần như cả nước đều thế. Chữ viết ra khỏi tay tôi dưới dạng vieets. Một người bạn Sài Gòn gõ viet61. Ai từng học gõ trên các diễn đàn email thập niên 1990 có khi vẫn viết vie^'t. Ba chuỗi phím khác nhau, cùng một chữ, và chẳng chuỗi nào giống chữ ấy cả.
Mấy tuần trước tôi đã viết về chuyện vì sao tiếng Việt lại được ghi bằng chữ cái La-tinh. Bài này nói về bài toán tiếp theo: làm sao đưa những chữ cái ấy, với cả chồng dấu trên đầu, vào trong máy.
Một bàn phím không ai có
Bảng chữ cái tiếng Việt có 29 chữ, nhưng dấu thanh nhân con số đó lên nhiều lần. RFC 1456, tài liệu Internet năm 1993 định nghĩa những bảng mã tiếng Việt phổ biến đầu tiên, nói thẳng: ngoài bộ ASCII, tiếng Việt cần thêm “134 tổ hợp chữ cái và dấu phụ”. Máy chữ còn nhét được vài tổ hợp vào phím chết. Bàn phím thì không thể chứa 134 phím như vậy.
Việt Nam có hẳn tiêu chuẩn quốc gia về bố trí phím tiếng Việt, TCVN 6064:1995, và Windows có sẵn một bố cục dựa trên đó. Tôi chưa từng thấy ai dùng. Thay vào đó, mọi người dùng bàn phím Mỹ bình thường cộng với một phần mềm nhỏ theo dõi phím bấm rồi thay vào đúng chữ. Telex, VNI và VIQR là ba bộ quy tắc mà các phần mềm ấy tuân theo.
Telex: mẹo của nhân viên bưu điện
Telex là kiểu gõ cổ nhất, và lô-gíc của nó ra đời trước máy tính cá nhân nửa thế kỷ. Thập niên 1920–1930, đường dây điện tín ở Việt Nam chỉ truyền được chữ La-tinh trơn. Một bức điện ghi vo de có thể là vỡ đê, cũng có thể là vợ đẻ, hai tin rất nên phân biệt cho rõ. Quy ước này thường được gán cho nhà báo, dịch giả Nguyễn Văn Vĩnh; Saigoneer lần ra một đề xuất ông đăng trên tờ Trung Bắc Tân Văn năm 1929. Ý tưởng là dùng chữ cái để “đánh vần” dấu.
Bản trên máy tính giữ nguyên ý tưởng ấy. Gõ đúp nguyên âm thì có dấu mũ (aa → â, ee → ê, oo → ô). Chữ w thêm dấu móc hoặc dấu trăng (aw → ă, ow → ơ, uw hoặc chỉ w → ư), còn dd cho ra đ. Năm chữ cái gần như không bao giờ đứng cuối âm tiết tiếng Việt được dùng làm dấu thanh: s sắc, f huyền, r hỏi, x ngã, j nặng, và z để xoá dấu. Vậy vieets là v-i-ê-t cộng dấu sắc.
Điểm yếu thì ai quên tắt Telex khi gõ tiếng Anh đều biết: tool thành tôl, address thành ađress. Điểm mạnh là ngón tay không bao giờ phải rời hàng chữ, nên trên điện thoại hầu như ai tôi quen cũng gõ Telex. Quy tắc cũ cũng chưa chết hẳn: Wikipedia ghi nhận điện tín Morse tiếng Việt đến nay vẫn đánh dấu theo kiểu Telex.
VNI: thay chữ bằng số
VNI đến từ bên kia Thái Bình Dương. Ông Hồ Thành Việt lập công ty VNI Software ở Westminster, California, năm 1987 để tiếng Việt dùng được trên những chiếc PC mà cộng đồng người Việt hải ngoại bắt đầu mua. Thiết kế đầu tiên đặt dấu thanh lên các phím chức năng F1, F2… Khi hệ điều hành chiếm mất các phím đó, kiểu gõ chuyển sang hàng phím số, và bảng phím thì dễ nhớ: 1 đến 5 là năm dấu theo đúng thứ tự sách giáo khoa (sắc, huyền, hỏi, ngã, nặng), 6 là dấu mũ, 7 dấu móc, 8 dấu trăng, 9 biến d thành đ, 0 xoá dấu. Viết là viet61; thật là tha6t5.
Phím số không bao giờ đụng độ với từ tiếng Anh, nhưng mỗi lần cần chữ đ lại phải với lên phím 9 thì chậm. VNI còn có một chú thích pháp lý. Microsoft đưa kiểu gõ này vào bản Windows 95 tiếng Việt; VNI kiện vì bị dùng trái phép, Microsoft dàn xếp ngoài toà và rút kiểu gõ ra. Phải đến Windows 10 phiên bản 1903, phát hành tháng 5/2019, Windows mới có bộ gõ tiếng Việt tích hợp sẵn, gồm Telex và một bàn phím tên là “Vietnamese Number key-based”, thực chất là VNI mang tên khác.
VIQR: tiếng Việt cho email 7 bit
Kiểu thứ ba thực ra là một quy ước viết tiếng Việt hoàn toàn không cần ký tự đặc biệt. Nó lớn lên trong các danh sách email của người Việt hải ngoại và nhóm Usenet soc.culture.vietnamese, rồi được ghi thành văn bản trong RFC 1456 tháng 5/1993 bởi một nhóm tình nguyện, Vietnamese Standardization Working Group, quen gọi là Viet-Std. Mỗi dấu được thay bằng ký tự giống nó nhất trên bàn phím: ( cho dấu trăng (a( → ă), ^ dấu mũ, + dấu móc (o+ → ơ), ' sắc, ` huyền, ? hỏi, ~ ngã, . nặng, và dd cho đ. Viết là vie^'t.
Chính RFC thừa nhận mối nguy hiển nhiên: nếu không có luật chặn, câu “How are you?” sẽ bị đọc thành How are yoủ. Bây giờ VIQR hiếm gặp, nhưng vẫn còn trong kho lưu trữ các diễn đàn cũ và trong thói quen tay của những người học gõ tiếng Việt ở nước ngoài thập niên 1990.
Bốn mươi sáu cách lưu cùng một bộ chữ
Gõ mới là một nửa bài toán. Văn bản còn phải được lưu lại, và ở đây tiếng Việt trải qua một thời kỳ hỗn loạn kéo dài. Wikipedia đếm được tới 46 bảng mã ký tự cho tiếng Việt. Những bảng người ta thực sự gặp là VISCII (của Viet-Std), VSCII hay “TCVN3” (tiêu chuẩn quốc gia TCVN 5712:1993), bảng mã riêng của VNI, VPS và Windows-1258 của Microsoft. Mỗi bảng giải bài toán 134 tổ hợp một kiểu. VISCII nhét sáu chữ hoa ít dùng vào các vị trí mã điều khiển. VNI ghi một nguyên âm bằng hai byte, byte thứ hai mang dấu. TCVN3 thống trị ngoài Bắc, VNI thống trị trong Nam, và một văn bản mở bằng sai phông chữ sẽ biến thành thứ cháo mà dân văn phòng thời ấy ai cũng nhận ra: §¹i häc thay cho Đại học, Vieät Nam thay cho Việt Nam.
Unicode chấm dứt chuyện đó, nhưng không phải không có tranh cãi. Kế hoạch ban đầu của Unicode chỉ mã hoá các dấu tổ hợp rồi để phần mềm tự xếp chồng. Viet-Std vận động để có chữ dựng sẵn, và năm 1993 hiệp hội Unicode đồng ý mã hoá mọi chữ cái tiếng Việt thành ký tự dựng sẵn. Chúng nay nằm rải rác trong bốn khối, phần lớn ở khối Latin Extended Additional. Các bảng mã cũ lụi dần; Mozilla bỏ hỗ trợ tất cả, trừ Windows-1258, vào năm 2014.
Hai di sản vẫn còn làm khổ lập trình viên. Thứ nhất, cả hai cách ghi một chữ cái đều là Unicode hợp lệ: ề có thể là một điểm mã hoặc ba (e, dấu mũ, dấu huyền). UniKey có hẳn tuỳ chọn cho việc này, “Unicode” dựng sẵn và “Unicode tổ hợp”, và tôi từng phải gỡ một lỗi tìm kiếm trong đó tên file gõ trên máy Mac, nơi hệ thống file trước đây lưu tên ở dạng tách rời, không khớp với đúng tên ấy gõ trong trình duyệt. Hãy chuẩn hoá chuỗi. Thứ hai, tiếng Việt có hai quy tắc đặt dấu thanh cho những âm tiết như hòa và thủy. Phần lớn bộ gõ mặc định kiểu cũ (hòa, thủy) và có tuỳ chọn kiểu mới (hoà, thuỷ), vốn là cách Bộ Giáo dục và Đào tạo quy định cho sách giáo khoa từ năm 2018. Với người đọc đó là cùng một chữ. Với grep đó là hai chuỗi khác nhau.
Chương trình 2 KB nằm trong iPhone của bạn
Phần mềm khiến toàn bộ chuyện trên trở nên vô hình với phần lớn người dùng Việt Nam do một sinh viên viết ra. Đầu thập niên 1990, Phạm Kim Long, khi ấy đang học Đại học Bách khoa Hà Nội, thắng cuộc cá với ba bạn cùng lớp bằng cách viết chương trình gõ tiếng Việt nhỏ nhất cho DOS: chừng hai kilobyte mã assembly. Anh phát hành UniKey cho Windows miễn phí năm 1999, mở mã nguồn lõi xử lý dưới tên x-unikey cho Linux năm 2001, và năm 2006 đồng ý trao mã nguồn cho Apple theo giấy phép MIT. Từ Mac OS X Leopard năm 2007 và iOS 4 năm 2010, bàn phím tiếng Việt tích hợp trên mọi máy Mac và iPhone đều chạy trên lõi của anh. Lời ghi nhận vẫn còn đó trong Cài đặt → Cài đặt chung → Giới thiệu → Pháp lý.
Những cái dấu người ta bỏ đi
Chương cuối thì chưa phần mềm nào giải được. Thời điện thoại chưa hiển thị được tiếng Việt, người ta gõ luôn không dấu, và tiếng Việt không dấu trở thành một lối viết riêng. Phần lớn thời gian nó vẫn hiểu được, vì ngữ cảnh làm hết việc, nhưng sự mơ hồ là có thật. dan có thể là dân, dần, dặn, dẫn, đan, đàn, đản, đạn hay đần. con dau là con dâu, con dấu, con đau hay còn đâu.
Tự động thêm dấu là bài toán đã được nghiên cứu nhiều, và các con số cho thấy nó khó đến đâu. Một bài báo năm 2017 của Thai-Hoang Pham, Xuan-Khoai Pham và Phuong Le-Hong coi việc thêm dấu như dịch máy từ tiếng Việt không dấu sang có dấu. Hệ thống dịch theo cụm từ đạt độ chính xác 97,32%, hệ thống mạng nơ-ron đạt 96,15% nhưng nhanh gấp đôi. Đó là những con số tốt, và vẫn có nghĩa là khoảng ba lỗi trên một trăm âm tiết, tức gần như câu dài nào cũng có một chữ sai. Lỗi rơi đúng vào chỗ ngữ cảnh mỏng nhất: tên riêng, câu trả lời một chữ, con số viết bằng chữ. Máy nay giỏi hơn trước rất nhiều. Nhưng vẫn kém một người biết rõ hai bên đang nhắn tin với nhau.
Tôi rút ra được gì
- Người mới học tiếng Việt: chọn Telex ngay ngày đầu. Nó là mặc định trên điện thoại, trên Mac và trong Windows, và quy tắc “gõ đúp nguyên âm, chữ dấu để cuối” học trong một buổi chiều là xong. Dấu là một nửa thông tin, nên hãy gõ dấu.
- Chuyển chế độ, đừng vật lộn với nó. Nếu gõ cả tiếng Anh lẫn tiếng Việt suốt ngày, hãy đặt một phím tắt để bật tắt bộ gõ. Mỗi chữ ađress gửi nhầm là một lời nhắc.
- Lập trình viên: chuẩn hoá về NFC ngay khi nhận dữ liệu, và coi hòa với hoà là một khi tìm kiếm. Đừng bao giờ lưu tiếng Việt không dấu rồi hy vọng khôi phục sau; bộ thêm dấu tốt nhất vẫn sai ba trên một trăm.
- Vẫn nên tập đọc không dấu. Bạn sẽ nhận được tin nhắn kiểu đó, và kỹ năng đoán đúng chữ từ ngữ cảnh cũng chính là kỹ năng giúp bạn nghe tốt hơn.
Ba cách gõ chữ viết ở đầu bài, xét cho cùng, là ba thế hệ của cùng một quyết định: một đất nước trăm triệu dân chọn giữ nguyên bàn phím của thế giới và dạy phần mềm hiểu mình. Cách đó hiệu quả đến mức phần lớn chúng ta chưa bao giờ nghĩ đến nó.
Nguồn
- RFC 1456: Conventions for Encoding the Vietnamese Language (VISCII and VIQR), Vietnamese Standardization Working Group, tháng 5/1993.
- Wikipedia, Telex (input method), VNI, Vietnamese language and computers, UniKey (software).
- Saigoneer, Typing Vietnamese, Part 1: Language, Identity and Technology at a Crossroad và Part 2: The Vietnamese Diaspora, Unicode and the Ubiquity of Unikey.
- UniKey, About UniKey và UniKey in macOS and iOS; VietnamNet, The author of Unikey, the national software.
- Microsoft Community, Telex mode: Vietnamese keyboard (Windows 10 phiên bản 1903).
- Pham, T.-H., Pham, X.-K., Le-Hong, P. (2017). On the Use of Machine Translation-Based Approaches for Vietnamese Diacritic Restoration. IALP 2017.
- Keyman, Vietnamese Telex keyboard help (quy tắc đặt dấu kiểu cũ và kiểu mới); Thư viện Pháp luật, Quy định về chính tả tiếng Việt trong sách giáo khoa (Quyết định 1989/QĐ-BGDĐT, 25/5/2018).