Tiếng Việt và máy tính

Tiếng Việt được viết bằng bảng chữ cái Latinh kèm dấu phụ để thể hiện thanh điệu, đòi hỏi mấy sự thích ứng khác nhau khi gõ trên điện thoại hoặc máy tính. Hình thức nhập liệu phổ biến để viết tiếng Việt trên điện thoại hoặc máy tính là dùng phần mềm như UniKey. Telex là kiểu nhập liệu cổ nhất được đặt ra để biên mã tiếng Việt tính cả thanh điệu. Các phương pháp nhập khác còn bao gồm VNI (nhập dựa trên phím số) và VIQR. Tránh nhầm lẫn kiểu gõ VNI với bảng mã VNI. Xưa kia, tiếng Việt còn được viết bằng chữ Nôm, gần đây loại chữ viết này chủ yếu được dùng cho mục đích lễ hội và truyền thống, còn ngoài ra thì chỉ nằm trong lĩnh vực của giới sử học và văn hiến học. Đôi khi có thể viết tiếng Việt không dấu mà dựa vào ngữ cảnh thì người biết tiếng Việt thường vẫn có thể đoán được nghĩa. Có đến tận 46 bảng mã ký tự để thể hiện chữ Quốc Ngữ. Unicode đã trở thành bảng mã phổ biến nhất do tính tương thích ưu việt cùng với hỗ trợ phần mềm của nó. Các dấu phụ có thể được biên mã trở thành hoặc là ký tự tổ hợp hoặc là ký tự dựng sẵn, cả hai loại ký tự này đều được bố trí rải rác tựu trung các khối Latin Mở rộng A, Latin Mở rộng B, và Latin Mở rộng Bổ sung. Với biểu tượng Việt Nam Đồng (₫) thì nó được biên mã trong khối Biểu tượng Tiền tệ. Trong quá khứ, tiếng Việt từng sử dụng các ký tự nằm ngoài bảng chữ cái hiện đại. Chữ cái B đuôi quặp (ꞗ) của tiếng Việt Trung đại thì được bao gồm bên trong khối Latin Mở rộng D. Dấu apex chưa được bao gồm trong Unicode, nhưng có thể dùng U+1DC4 ◌᷄ Combining macron-acute làm thay cho dấu apex khá giống. Các phiên bản Unicode ban đầu có chỉ định 2 ký tự U+0340 ◌̀ Combining grave tone mark và U+0341 ◌́ Combining acute tone mark (lần lượt ứng với dấu huyền và dấu sắc) nhằm mục đích đặt mấy dấu đấy nằm một bên dấu mũ vì đây là điều thường thấy trong typography tiếng Việt. Hai ký tự đấy đã bị thôi dùng; thay vào đó, U+0301 ◌́ Combining acute accent và U+0300 ◌̀ Combining grave accent giờ được sử dụng bất chấp dấu mũ hiện diện nào. Cho những hệ thống thiếu sự hỗ trợ Unicode, thì hàng tá code page tiếng Việt 8-bit đã được thiết kế. Trong số đó có VISCII, VSCII (TCVN 5712:1993), VNI, VPS và Windows-1258 là thông dụng nhất. Ở những chỗ đòi hỏi ASCII, thí dụ khi phải đảm bảo tính khả đọc cho văn bản thuần trong e-mail, thì chữ cái tiếng Việt hay được biên mã dựa theo Vietnamese Quoted-Readable (VIQR) hoặc VSCII Mnemonic (VSCII-MNEM), tuy vậy sở dụng của cả hai cách thức này đã sụt giảm đáng kể theo sau sự thông qua việc dùng Unicode trên World Wide Web. Chẳng hạn, sự hỗ trợ cho tất cả các bảng mã 8-bit được nói đến ở trên (ngoại trừ Windows-1258) đã bị bỏ hẳn khỏi phần mềm Mozilla trong năm 2014. Nhiều phông Việt làm dành cho việc chế bản điện tử thì được biên mã bằng VNI hoặc TCVN3 (VSCII). Những phông như vậy được gọi là "phông ABC" hay "ABC font". Các trình duyệt web phổ biến đều thiếu vắng sự hỗ trợ cho những bảng mã tiếng Việt chuyên biệt như vậy, cho nên ở trên những hệ thống mà không cài đặt những phông chữ đấy, nếu bất kỳ trang web nào mà sử dụng những phông đấy thì đều sẽ bị hiển thị thành nội dung mojibake (chữ ma, loạn mã) không thể hiểu nổi. Tiếng Việt thường hay xếp chồng dấu phụ, cho nên nhà thiết kế kiểu chữ phải cẩn thận để phòng ngừa 'các dấu phụ xếp chồng' khỏi bị va đụng với các chữ cái hoặc đường kẻ liền kề. Khi dấu giọng được dùng chung với một dấu phụ khác, thì phải xê dịch dấu giọng đấy sang bên phải để bảo toàn tính nhất quán và tránh làm chậm saccade. Trong biển hiệu quảng cáo và trong thể chữ thảo, dấu phụ thường hay có dạng xa lạ với các bảng chữ cái Latin khác. Cho ví dụ, 'mẫu tự I viết thường' giữ nguyên dấu chấm tittle trong ì, ỉ, ĩ, và í. Các sắc thái này hiếm được tính đến trong môi trường điện toán. Việc viết tiếng Việt đòi hỏi 134 mẫu tự cộng thêm (cả viết hoa lẫn viết thường) bên cạnh 52 mẫu tự đã hiện diện trong ASCII. Như vậy là vượt quá 128 ký tự phụ thêm sẵn có trong bảng mã ASCII mở rộng thường quy. Cho dù vấn đề này có thể được giải quyết bằng cách dùng bảng mã độ rộng biến thiên (như các bảng mã Tiếng Trung, Tiếng Nhật hoặc UTF-8 đã làm), thì một số lượng các lối tiếp cận riêng đã được các bảng mã khác sử dụng để hỗ trợ tiếng Việt thay vì làm thế: Thay thế ít nhất 6 ký tự ASCII, lựa những ký tự hoặc là ít thông dụng trong tiếng Việt, và/hoặc là mang tính phi bất biến trong ISO 646 hoặc DEC NRCS (như trong VNI for DOS). Loại bỏ các mẫu tự in hoa mà ít được dùng thường xuyên nhất, hoặc loại bỏ tất cả các mẫu tự in hoa có dấu giọng (như trong VSCII-3 (TCVN3)). Các mẫu tự in hoa đấy vẫn có thể được bù đắp qua phương tiện bộ phông chữ hoa riêng biệt. Loại bỏ các dạng mẫu tự Y có dấu giọng, ép buộc sử dụng mẫu tự I trong những tình huống có thể dùng Y có dấu. Lối tiếp cận này đã bị những nhà thiết kế VISCII bác bỏ trên cơ sở rằng bảng mã ký tự không nên cố giải quyết vấn đề cải cách chính tả. Thay thế ít nhất 6 ký tự điều khiển C0 (như trong VISCII, VSCII-1 (TCVN1) và VPS). Sử dụng ký tự tổ hợp, cho phép một nguyên âm có dấu được thể hiện đầy đủ bằng cách dùng dãy các ký tự cho chúng tổ hợp với nhau (như trong VNI, VSCII-2 (TCVN2), Windows-1258 và ANSEL). Nhiều phông chữ không có các ký tự đặc thù cho tiếng Việt, mà các ký tự đấy tồn tại với mật độ rất cao trong văn bản tiếng Việt, nên trên những trình duyệt Web có thực hiện cơ chế thay thế phông chữ thì chắc chắn sẽ xảy ra hiện tượng "giấy đòi tiền chuộc" (ransom note effect) khi trang web sử dụng phông chữ như vậy để hiển thị tiếng Việt. Unicode chứa hơn 10.000 ký tự Nôm làm thành bộ phận của tự vựng (repertoire) Văn tự biểu ý Thống nhất CJK. Trong số những ký tự đó, có 5.260 ký tự được đặt trong khối Chữ biểu ý Thống nhất CJK Phần mở rộng B, còn phần còn lại thì được phân phối tựu trung các khối Chữ biểu ý Thống nhất CJK, Chữ biểu ý Thống nhất CJK Phần mở rộng A, và Chữ biểu ý Thống nhất CJK Phần mở rộng C. Có 1.028 ký tự thêm nữa – gồm hơn 400 ký tự đặc thù cho Tiếng Tày – được biên mã trong khối Chữ biểu ý Thống nhất CJK Phần mở rộng E. Các ký tự đấy được lấy từ tiêu chuẩn Việt Nam TCVN 5773:1993 và TCVN 6056:1995, và cũng được lấy từ nghiên cứu của Viện Nghiên cứu Hán Nôm và các nhóm khác. Tất cả các ký tự trong TCVN 5773:1993 và khoảng 95% các ký tự trong TCVN 6056:1995 đều có các codepoint tương ứng trong Unicode 5.1, tuy thế bản thân TCVN 5773:1993 lại ánh xạ hầu hết các ký tự của nó vào trong Khu Dùng Riêng của Unicode. Unicode 13.0 có thêm hai ký tự dấu phụ vào khối Biểu tượng và Dấu câu Chữ biểu ý, hai ký tự đó thường hay được sử dụng để báo biết các 'chữ mượn Hán' trong chữ Nôm. Hai bộ phông Nôm toàn diện nhất là phông Nôm Na Tống Light của Hội Bảo tồn Di sản Chữ Nôm và phông HAN NOM A/HAN NOM B do cộng đồng phát triển, cả hai phông này đều đặt một số lượng lớn các 'ký tự chưa chuẩn hóa' vào trong Khu Dùng Riêng của Unicode. Cơ sở dữ liệu Unihan của Hiệp hội Unicode có bao gồm cách đọc tiếng Việt cho một số ký tự nhưng không khu biệt giữa cách đọc Hán-Việt và cách đọc Nôm. Giống như các hệ chữ viết CJKV khác, chữ Nôm theo truyền thống được viết dọc, từ trên xuống dưới và từ phải qua trái. Cả chữ Hán và chữ Nôm đều có thể được chú giải bằng cách dùng ký tự ruby. Bàn phím thuần vật lý cho tiếng Việt thì lại mang tính phi thực tiễn do số lượng cực lớn tổ hợp 'mẫu tự'-'dấu phụ'-'dấu phụ' trong bảng chữ cái (vd. á, à, ả, ã, ạ, â, ấ, v.v.). Thay vào đó, việc nhập liệu tiếng Việt đều nhờ vào bố cục bàn phím, bàn phím ảo, hoặc phương thức nhập (còn gọi là IME) dựa trên phần mềm máy tính. Bố cục bàn phím tiếng Việt nhờ vào các phím chết để tổ hợp mẫu tự với dấu phụ. Hầu hết các hệ điều hành desktop đều kèm một bố cục bàn phím tiếng Việt tương tự như TCVN 6064:1995 (một tiêu chuẩn quốc gia Việt Nam). Trước đây thì bố cục bàn phím "AĐERTY" (dựa trên AZERTY) được sử dụng cho máy đánh chữ để gõ tiếng Việt. Ba phương thức nhập tiếng Việt phổ biến đó là Telex, VNI, và VIQR. Telex gõ dấu phụ bằng những mẫu tự ít có khả năng xuất hiện tại chỗ cuối của từ ngữ, còn VNI thì dùng lại các phím số hoặc các phím chức năng cho mục đích gõ dấu, và tương tự, VIQR cũng dùng lại nhiều phím dấu câu khác nhau cho việc này. Quy ước gõ Telex và VIQR đều khởi nguồn từ thời kỳ trước kia của lần lượt máy điện tín và máy đánh chữ. Sự hỗ trợ cho các phương thức nhập liệu đấy đều được các Input Method Editor (IME) cung cấp, tại Việt Nam thì được gọi là bộ gõ. IME có thể được hệ điều hành cung cấp, được cài đặt làm ứng dụng bên thứ ba, được cài đặt làm phần mở rộng trình duyệt, hoặc được cung cấp bởi website riêng lẻ dưới dạng kịch bản lệnh. Các ứng dụng phổ thông bên thứ ba gồm có GoTiengViet, UniKey, VietKey, VPSKeys, WinVNKey, và xvnkb. Trên các hệ điều hành giống Unix, hai framework IBus và SCIM đều hỗ trợ tiếng Việt. Những IME như AVIM, Mudim, và VietTyping được trang bị trên hầu hết các diễn đàn trực tuyến tiếng Việt, trên Wikipedia tiếng Việt, và trên nhiều 'website có tập trung sâu vào văn bản' khác. Trình duyệt web Cốc Cốc được phát hành kèm với một phương thức nhập liệu dựng sẵn. Các phương thức nhập giúp tổ hợp các từ ngữ theo trật tự linh hoạt hơn so với những gì mà bố cục bàn phím mang lại. Cho ví dụ, để nhập từ "viết" mà dùng bố cục bàn phím TCVN 6064:1995 thì người ta phải gõ VI38T theo đúng thứ tự. Trái lại, hầu hết các IME đều cho phép người dùng chèn dấu phụ tại chỗ cuối của từ ngữ: theo Telex thì là VIEETS, theo VNI thì là VIET61, hoặc theo VIQR thì là VIET^'. Một số IME thậm chí còn cho phép nhập dấu phụ đằng trước mẫu tự cơ sở. Tùy thuộc vào sự thực hiện của IME, mà người dùng còn có thể sửa đổi dấu phụ của một từ có sẵn mà không phải gõ lại cả từ đó. Một số bàn phím ảo bổ sung phím tắt bên cạnh các phím chết. Ví dụ bàn phím VIQR có sẵn trong iOS cho phép đặt dấu móc vào chữ "U" bằng cách chạm 123#+=+ hoặc phím ◌̛ riêng, phím này không có phím tương tự trên bàn phím thật. Một số IME tiếng Việt có học hỏi một tính năng phổ thông tựu trung các phương thức nhập Tiếng Trung, đó là khả năng cho phép người ta bỏ qua hẳn dấu phụ luôn. Mà thay vào đó, sau khi gõ các mẫu tự cơ sở, bảng danh sách các gợi ý (candidate list) sẽ hiển thị, và người dùng sẽ lựa chọn từ ngữ có dấu phụ mà mình muốn ra khỏi bảng đó. Để có thể cung cấp danh sách tự hoàn thành đấy, IME có thể cần phải giao tiếp với dịch vụ web. Một số IME còn có thể sử dụng danh sách gợi ý để cho người dùng chuyển đổi văn bản từ chữ Quốc ngữ sang chữ Nôm, bởi không hề có ánh xạ một-một tương ứng giữa từ ngữ an-pha-bê với chữ Nôm. Văn bản tiếng Việt điển hình thì có chứa tỷ lệ lớn các từ phức. Các từ phức không bao giờ có dấu nối trong sở dụng đương đại, cho nên trình kiểm tra chính tả bị giới hạn chỉ có thể kiểm tra từng âm tiết đơn lẻ, trừ phi tham khảo vào mô hình ngôn ngữ thống kê. Tiếng Việt có quy tắc đánh vần "cứng" và ít ngoại lệ, cho nên các engine 'văn bản'-sang-'giọng nói' (TTS engine) có thể tránh việc tra cứu từ điển, trừ khi gặp phải từ mượn ngoại lai. Các TTS engine phải tính đến thanh điệu – một thứ cốt yếu cho ngữ nghĩa của bất kì từ ngữ tiếng Việt nào. Giao diện người dùng quốc tế hóa nói chung là không có khả năng vận dụng được hết đại từ nhân xưng trong tiếng Việt sao cho đúng với mong đợi của bối cảnh xã hội truyền thống, ngay cả khi biết rất rõ về vai vế của người dùng. Thay vào đó thì những giao diện người dùng như vậy thường sử dụng các đại từ chung chung chẳng hạn như "tôi" và "bạn", một số cách dùng đại từ như vậy có thể sẽ gây ra giả định không chính xác về độ tuổi và vai vế của người dùng này đối với người dùng khác. Ví dụ, khi một phương tiện truyền thông xã hội nào đó báo tin cho người dùng nọ về một người dùng trẻ hơn nào đó, nó có thể gọi người dùng trẻ hơn đấy là "anh ấy" thay vì "em ấy", khiến cho người dùng nọ hiểu sai rằng tin báo đấy là nhắc về một ai đó khác cơ. ^ Encode ^ Character encoding ^ Combining character ^ Precomposed character ^ Latin Extended-A ^ Latin Extended-B ^ Latin Extended Additional ^ Currency Symbols ^ Latin Extended-D ^ Circumflex ^ Chuyển động giật nhanh của mắt. ^ Variable-width encoding ^ Nhiều bảng mã có thể được xây dựng dựa trên một tiêu chuẩn nào đó, trong đó quy định một tập ký tự phải đảm bảo hiển thị giống nhau qua khắp các bảng mã theo tiêu chuẩn đấy, những ký tự đó được gọi là mang tính bất biến (invariant), những ký tự còn lại thì được gọi là mang tính phi bất biến (non-invariant). ^ Font substitution ^ Các kí tự khác phông chữ xen kẽ nhau ^ Chưa tính đến các ký tự trùng với chữ Hán (vì hệ thống chữ Nôm bao gồm cả chữ Hán). ^ CJK Unified Ideographs ^ 5.260 ký tự trong khối CJK Extension B có thuộc tính kIRG_VSource. ^ CJK Unified Ideographs Extension B ^ CJK Unified Ideographs ^ CJK Unified Ideographs Extension A ^ CJK Unified Ideographs Extension C ^ CJK Unified Ideographs Extension E ^ Private Use Areas ^ Ideographic Symbols and Punctuation ^ Nhiều "chữ Nôm" thực ra là chữ Hán có thêm dấu cá/nháy bên cạnh để báo hiệu chữ đấy phải được đọc theo âm Nôm. ^ Han unification ^ Dead key ^ a b Ngô Đình Học; Trần Tư Bình (ngày 21 tháng 7 năm 2014). “Express Manual for WinVNKey”. WinVNKey. Truy cập ngày 5 tháng 10 năm 2014. ^ “Combining Diacritical Marks”. Unicode 7.0 Character Code Charts. Hiệp hội Unicode. ngày 16 tháng 6 năm 2014. Truy cập ngày 5 tháng 10 năm 2014. ^ Ngo, Hoc Dinh; Tran, TuBinh. “5. Why Having Vietnamese Charset (Character Set – Encoding) Conversion?”. Some special functions of WinVNKey. ^ a b “Chọn Font chữ, bảng mã để gõ tiếng Việt”. Bộ gõ tiếng Việt.Com. MangVN. 2009. Bản gốc lưu trữ ngày 20 tháng 11 năm 2010. ^ Lunde, Ken (2009). CJKV Information Processing (ấn bản 2). O'Reilly Media. tr. 47–49. ISBN 978-0-596-51447-1 – qua Google Books. ^ Sivonen, Henri (ngày 26 tháng 9 năm 2014). “Character encoding changes in m-c require c-c action”. mozilla.dev.apps.thunderbird. ^ Hoàng Tô; Nguyễn Quan Sơn; Nguyễn Sơn Tùng; Phan Quang Minh; Phạm Thúc Trương Lương; Nguyễn Quang Hiệp; Bùi Văn Kiên; Nguyễn Ích Vinh (ngày 20 tháng 7 năm 2014). Sử ký Tinh Vân: 20 năm sẻ chia và sáng tạo. 1. Tinhvan Group. tr. 37 – qua Google Books. ^ Trương, Donny. “Design Challenges”. Vietnamese Typography. Truy cập ngày 10 tháng 4 năm 2018. ^ Ví dụ thì hãy xem: “Viết Thư”. Vietnamese reading selections (ấn bản 2). Army Language School. 1956. tr. 98–100. ^ a b c d e “2. Review Of Current Conventions”. Vietnamese Character Encoding Standardization Report - VISCII And VIQR 1.1 Character Encoding Specifications (Bản báo cáo kỹ thuật). Viet-Std Group. 1992. tr. 10. ^ “Unicode & Vietnamese Legacy Character Encodings”. Vietnamese Unicode FAQs. 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. ^ Trần Văn Kiệm (2004). “phở”. Giúp đọc Nôm và Hán Việt (ấn bản 4). [1] ^ Nguyễn Quang Hồng. “Giới thiệu Kho chữ Hán Nôm mã hoá”. Vietnamese Nôm Preservation Foundation. ^ Lunde 2009, tr. 152–153.Lỗi sfn: nhiều mục tiêu (2×): CITEREFLunde2009 (trợ giúp) ^ Collins, Lee; Ngô Thanh Nhàn (ngày 6 tháng 11 năm 2017). “Proposal to Encode Two Vietnamese Alternate Reading Marks” (PDF). ^ “Proposed New Characters: The Pipeline”. Hiệp hội Unicode. ngày 8 tháng 5 năm 2019. Truy cập ngày 26 tháng 5 năm 2019. ^ “Nôm Font”. Vietnamese Nôm Preservation Foundation. Truy cập ngày 5 tháng 10 năm 2014. ^ Đỗ Quốc Bảo; Tô Minh Tâm; Thiền Viện Viên Chiếu (ngày 8 tháng 12 năm 2005). “UNICODE Han Nom Font Set”. Truy cập ngày 5 tháng 10 năm 2014. ^ Lunde 2009, tr. 529.Lỗi sfn: nhiều mục tiêu (2×): CITEREFLunde2009 (trợ giúp) ^ Duncan, John William (22 tháng 12 năm 2005), VietNamese Typewriter, truy cập ngày 11 tháng 7 năm 2020 ^ Jacob, Raquel (2 tháng 2 năm 2022). “Language Guidelines – Vietnamese” [Hướng dẫn ngôn ngữ – tiếng Việt] (bằng tiếng Anh). Unbabel. Truy cập 18 tháng 7 năm 2022. Lunde, Ken (2009). CJKV Information Processing. Sebastopol, California: O'Reilly Media. ISBN 978-0-596-51447-1 – qua Google Books. Computing in Vietnamese: Progress & Challenges – Thuyết trình của Nhóm Người dùng Macintosh Quốc tế vào năm 2005; Hoán chuyển tiếng Việt – công cụ trực tuyến dùng để hoán chuyển qua lại giữa các bảng mã tiếng Việt.