Gian truân tiếng Việt trên máy tính

Một trong những thứ nghe thì tưởng dễ nhưng thật sự rất khó là việc trao đổi và hiển thị tiếng Việt trên máy tính.

Trên máy tính, mỗi ký tự là một con số. Ví dụ chữ "A" là con số 65, "B" là 66. Các con số nối nhau như thế thì làm thành văn bản. Ví dụ như một văn bản có chữ "Doraemon" thì máy tính ghi thành những con số "68 79 82 65 69 77 79 78" Việc ghi các con số này trên đĩa cứng hay USB không quan trọng, việc quan trọng ở đây là người ta có một quy tắc đổi từ chữ ra số và ngược lại. Thực tế ra thì máy tính sẽ ghi liền tù tì như thế này 6879826569777978. Đến khi hiển thị, máy tính nói với card màn hình, vẽ cho tôi con số 6879826569777978 lên màn hình, và bạn sẽ nhìn ra từ "Doraemon." Quy tắc biến chữ thành số và số thành chữ đó gọi là ASCII. Ngày xưa người Mỹ chỉ làm cho tiếng Mỹ và châu Âu nên người ta quyết định làm quy tắc với 256 chữ tương ứng với 256 con số như vậy (gồm cả những ký tự như "@", "%", hay "ñ" ở tiếng Tây Ban Nha). Vào thời đó, chỉ cần như vậy là đủ hiển thị biểu diễn được tất cả mọi thứ trên đời. 

ASCII meme magic: Vẽ cho tôi con số Pepe lên màn hình!
Sở dĩ người ta chỉ làm ra cận trên 256 con số là bởi vì bạn không ngắt được từng ký tự ra vì làm thế rất lãng phí. Nên nếu ví dụ chúng ta muốn một quy tắc có thể biểu diễn 10,000 ký tự thay vì 256 thì chúng ta sẽ mất rất nhiều không gian để ghi số 65 vì ta sẽ phải ghi một loạt số 0 ở đằng trước.
Như vậy, để hiển thị tiếng Việt vào lúc đó, các chương trình chạy trên DOS như ViệtRES làm một thủ thuật rất quái dị là nó đi bắt card màn hình vẽ lại những số nào không biểu diễn ký tự tiếng Việt thành tiếng Việt
Ví dụ như số để biểu diễn ký tự "ñ" tiếng Việt mình không dùng, thì VietRES bắt card màn hình vẽ lại con số đó thành một ký tự khác, ví dụ thành chữ "ề." Như vậy máy tính vẫn "tưởng" nó ghi chữ "ñ" nhưng với người dùng ở trước máy tính thì người ta nhìn thấy chữ "ề." Như vậy sắp xếp tiếng Việt chẳng hạn sẽ bị sai. Vấn đề ở đây, thường là vì một ký tự được coi là một khối không giống như khi mình viết, nên để viết chữ "ề" bạn phải vẽ cả chữ cả dấu một lúc. Nên một ký tự như chữ "e" đáng ra chỉ chiếm đúng 1 chỗ trong 256 chỗ kể trên, người ta phải mất tận 12 chỗ để mã hóa và hiển thị chữ "e" trong tiếng Việt: e è é ẻ ẽ ẹ ê ề ế ể ễ ệ. Kể cả chữ in hoa, chữ Việt có dấu chiếm 96 chỗ trong số 256 chỗ đó. Dĩ nhiên như thế thì việc hiển thị tiếng Việt sẽ có lúc làm ảnh hưởng tới các chương trình khác mà phải dùng một trong số 96 chữ bị thay, ví dụ chữ "®" thường biến thành chữ "â."
Cũng như vậy, Ở trên máy tính của Nhật, dấu \ thành chữ Yen.
Tuy có vấn đề như vậy, người Việt có hai lợi thế khi bước vào thế giới máy tính: Thứ nhất, đó là một giải pháp nhanh gọn thuận tiện không phải đi phát minh ra cái gì. Thứ hai, con số 96 kia tuy là lớn nhưng vẫn tạm chấp nhận được và nói chung không ảnh hưởng đến các chương trình tiếng Anh khác. Một hệ quả của việc này là ngày xưa người ta có các ký tự để kẻ bảng, tức là kẻ hàng ngang, hàng dọc, góc cạnh gì đều là một ký tự. Tiếng Việt theo kiểu VietRES chiếm các ký tự kẻ bảng đấy nên để bảng sẽ hiển thị thành ếàààààààế thay vì +-------+. Các chương trình đồ họa sẽ hiển thị sai. Các dấu toán học sẽ bị hiển thị sai. Tóm lại, giải pháp thay chữ là giải pháp đối phó, vì nó ảnh hưởng tới các ngôn ngữ khác cùng hiển thị trên máy tính. Điều may mắn là ngay cả khi không hiển thị được, thì tiếng Việt không dấu nói chung người ta vẫn hiểu được.
Các ngôn ngữ khác không phải là Latin vào thời này thì còn khổ hơn. Ví dụ có một người Thái Lan phải viết luận văn khoa học máy tính bằng tiếng Thái nhưng mà không có cách nào hiển thị được tiếng Thái. Cực chẳng đã ông ta phát minh ra một cái card đồ họa vẽ được chữ Thái và nó hữu dụng quá nên ông ta lập công ty bán ra toàn thế giới. Card đồ họa này gọi là Hercules. Để hiển thị được những ký hiệu, soạn thảo nhiều ngôn ngữ một lúc người ta vẫn phải vẽ lên màn hình từng điểm ảnh một chứ không dùng cách thay thế cả ký tự được. 
Việt Nam cũng vậy: Một số chương trình như BKED cho phép soạn thảo được tiếng Việt nhìn thì đơn giản nhưng thực ra có rất nhiều trí tuệ ở đằng sau đó.
Đây KHÔNG phải là giao diện text
Sở dĩ BKED hiển thị được tiếng Việt cùng lúc với hiển thị công thức toán học vì nó tận dụng các phần cứng như card Hercules để vẽ lên màn hình trên một giao diện đồ họa. Vì thế BKED trông thì đơn giản như một chương trình textmode nhưng là một chương trình đồ họa 100% và chỉ chạy được ở các máy tính mạnh hơn về sau này. May mắn là thời Việt Nam nhập được máy tính bãi rác từ Mỹ và các nước ngoài thì máy cũng đã đủ mạnh để vẽ.
BKED không phải là giao diện Text, đây là giao diện đồ họa 100%
FUUUUUU
Xu hướng vẽ lên màn hình thắng lớn về sau này. Khi máy tính nhanh hơn và mạnh hơn, người ta không gửi từng chữ một để bắt card màn hình đi vẽ nữa, mà người ta dùng chương trình để ra lệnh cho máy tính vẽ từng điểm ảnh một trên màn hình. Các lệnh đó gọi là Font - phông chữ. Như vậy có cách giải quyết khác cho vấn đề tiếng Việt là người ta đi coi chữ "ề" thành hai phần: Chữ "ê" và dấu huyền "`". Khi hiển thị chữ "ê`" thì cái dấu "`" trong font chữ có một chỉ thị đặc biệt để cho chương trình biết và lùi về một chút để dấu được đặt đúng trên chữ. Như thế thì việc lưu trữ và hiển thị tiếng Việt ít ảnh hưởng tới việc hiển thị các ngôn ngữ khác hơn. Đây là cách xử lý vấn đề của các chương trình như VNI. Nhưng VNI không giải quyết vấn đề, mà nó chỉ gây ra ít xung đột hơn với những ngôn ngữ hiện có vì bạn vẫn phải thay một số ký tự thành các dấu tiếng Việt. Mỗi quy tắc thay thế đó có cái lợi hại riêng. Ngày đó nếu bạn dùng font VNI sẽ không đọc được tiếng Việt từ BKED/ABC, và có hàng ngàn những cách mã hóa khác, mỗi người một quy tắc, loạn mười hai xứ quân không ai hiểu ai. Có những người phải đi viết chương trình để "chuyển" từ dạng Tiếng Việt này sang dạng khác.
Khoảng trước những năm 2000, khi Internet bắt đầu thâm nhập và thống trị thế giới thì nhu cầu hiển thị tất cả các ngôn ngữ cùng lúc là rất bức thiết. Vấn đề ở đây mà cứ đi thế chỗ nhau ở trong 256 chỗ đó thì mãi mãi sẽ không giải quyết được vấn đề, nên bắt buộc phải hiển thị con số dài. Người ta nghĩ ra nhiều cách để ghi con số dài. Cụ thể thế nào không quan trọng, nhưng ý tưởng chung của những cách tiếp cận này là nếu nhìn thấy một số đặc biệt, ví dụ số 01, thì coi các số tiếp theo là một. Ví dụ nếu nhìn thấy 015678, thì máy tính sẽ nhận ra là bạn cần hiển thị chữ tương ứng với số 5678. Vậy là người ta không bị giới hạn bởi 256 chỗ nữa, bạn có hàng chục ngàn chỗ cho tất cả mọi người dùng tất cả các ngôn ngữ trên thế giới -- thế giới mới này gọi là Unicode. Khi đó tiếng Việt được đặt một chỗ riêng gọi là Latin Mở rộng và không phải đi chiếm chỗ của các ngôn ngữ khác.
Nhưng như vậy vẫn chưa hết, vì Unicode không chuẩn hóa cách hiển thị tiếng Việt mà vẫn có hai cách để hiển thị tiếng Việt độc lập với nhau. Ví dụ chữ "ề" vẫn có hai cách biểu diễn, "ề" và "ê" + dấu "`". Vấn đề ở đây là nếu một người viết chữ "ề" bằng cách thứ nhất, còn người tìm chữ "ê+`" thì máy tính sẽ nói tìm không thấy. Người ta không ai bảo ai là cần làm gì, nên đến tận bây giờ tuy phần lớn mọi người đã thống nhất dùng cách thứ nhất là cả chữ "ề" là một khối, vẫn có một số người, ví dụ Medium, Facebook, Google Chrome dùng cách thứ hai tức là chữ "ê+`" để biểu diễn tiếng Việt.
Và một phần vấn đề chuyển sang thành vấn đề của phông chữ. Bởi vì người thiết kế phông chữ sẽ chỉ biết một số ngôn ngữ và chỉ thiết kế cho một số ngôn ngữ nhất định. Thế thì việc gì sẽ diễn ra khi phông chữ không biết cách vẽ một số nào đó? Nó sẽ hiện ra ô vuông. Nếu bạn không muốn ô vuông thì phải bảo máy tính quy tắc để tìm trong những phông tiếp theo xem có cái phông nào vẽ được chữ đó không. Đấy là lý do vì sao một phần các video kém chất lượng hiện nay nhiều người có những tựa đề kiểu: "HãY XEM LIKE VÀ BÌNH LUậN" - vì các chữ "ã" và "ậ" là do một phông chữ khác vẽ. Để máy tính hiển thị được hầu hết các ngôn ngữ bạn có thể đọc trên trình duyệt là một câu chuyện vô cùng phức tạp.
Với các thiết bị không phải là máy tính như ô tô và tàu bò thì việc hiển thị tiếng Việt còn đau khổ hơn. Hôm nọ mình nhận ra chương trình NhacCuaTui có một tùy chọn rất quái dị là "Dùng tiếng Việt không dấu khi hiển thị qua Bluetooth." Mình đoán do có nhiều xe có màn hình giải trí hiển thị tiếng Việt thành ô vuông khi phát bài hát trên nên họ phải làm như vậy. 

Vấn đề của các kỹ sư thường là khi phải cho ra lò một sản phẩm thì không ai có thời gian để chau chuốt cho tất cả các ngôn ngữ, việc đó thường được coi là việc nhỏ và bị bỏ quên, nhất là ở nơi có ít khách hàng. Với tư cách là một người Việt, mình có đóng góp để ngôn ngữ tiếng Việt hiển thị tốt trên sản phẩm của mình. Gần đây các xe Tesla đã hiển thị được tiếng Việt đàng hoàng và đó là một niềm vui khác của mình.

134
4411 lượt xem
134
20
20 bình luận