• Thứ Năm, 08/01/2004 16:00 (GMT+7)

    Một vài góp ý về TCVN-6909-2001


    Tôi có được một số bạn đồng nghiệp của PC World mời viết bài “tranh luận” về bộ mã chuẩn Unicode sắp được ban hành (ngày 1/7/2002?). Tôi đã đọc rất kỹ các bài viết của các anh Trần Lưu Chương, Hà Thân và Nguyễn Hoàng trên số B tháng 6 vừa rồi. Tôi không là một chuyên gia trong lĩnh vực “Mã Chuẩn” tiếng Việt, bản thân tôi cũng chưa được đọc trực tiếp nội dung cụ thể của tiêu chuẩn TCVN-6909, tôi chỉ đọc bản dự thảo về tiêu chuẩn này trong một hội thảo tổ chức tại Hà Nội vào giữa năm 2001. Thời gian quá ngắn cho công việc được đề nghị. Do vậy tôi sẽ chỉ trình bày tại đây một số ý kiến ngắn, hy vọng sẽ quay lại chủ đề này trong những bài viết sâu và kỹ hơn.
    Quả thật có nhiều điều cần phải nói về bộ mã TCVN-6909 và dự kiến của Chính Phủ về việc ban hành quyết định sử dụng theo tiêu chuẩn này. Chúng ta đã mất 15 năm không giải quyết được vấn đề mã tiếng Việt 8-bit. Cơ hội để có một bảng mã chuẩn 8-bit cho tiếng Việt Nam được nằm trong danh sách các bảng mã quốc gia chuẩn của ISO (hầu hết các quốc gia trên thế giới đều đã có) đã vĩnh viễn mất đi. Điều này không những là một thiệt thòi, mà thực sự là một “tai họa” cho ngành CNTT nước nhà. Tuy nhiên thời gian vẫn trôi đi, Unicode xuất hiện như một “cứu tinh” cho vấn đề “Bảng mã tiếng Việt”” và người ta hy vọng. Có lẽ vì những lý do trên nên khi nghe nói về một TCVN mới sắp sửa ra đời, sẽ có nhiều người sốt sắng muốn nó được thực thi ngay, và cũng có không ít người hoài nghi, phản đối. Theo tôi một diễn đàn như PC World VN đang thực hiện là rất cần thiết, đáng lẽ phải được mở ra từ lâu, chứ không phải bây giờ, khi đã đến sát giờ G quá rồi.

    Theo tôi chúng ta phải làm sáng tỏ được 2 điều quan trọng sau đây khi bàn về vấn đề này:
    1. Cần làm sao cho mọi người, hay ít ra là các nhà lãnh đạo, các chuyên gia và chính chúng ta nữa (trong đó có tôi) hiểu được ĐÚNG các vấn đề mà chúng ta đang nói đến. Tôi có thể khẳng định rằng rất rất nhiều người trong chúng ta đã không hiểu rõ về Unicode, về ISO-10646, về khái niệm bảng mã 16-bit, về khái niệm ký tự dựng sẵn hay tổ hợp, về các vấn đề công nghệ của “bảng mã Unicode”... Tôi đã từng nghe chính một anh trong nhóm tham gia xây dựng “Bảng mã chuẩn tiếng Việt” nói rằng tất cả các chuyên gia của Việt Nam trong nhóm đều không có hiểu biết sâu về các vấn đề phức tạp của Unicode. Nếu như chúng ta chưa hiểu đúng về vấn đề này thì việc đưa ngay ra một TCVN về chính vấn đề đó và yêu cầu thực thi là một việc làm rủi ro, nguy hiểm.

    2. Vấn đề thứ hai cũng rất quan trọng, đó là cần phân tích và tìm ra càng nhiều càng tốt những HẬU QUẢ sẽ dẫn đến khi thực thi các quyết định tương ứng đối với chuẩn TCVN-6909 này. Hậu quả sẽ khác nhau phụ thuộc vào nhiều yếu tố như bản thân nội dung của tiêu chuẩn, thời gian, phạm vi và cách thức thực hiện. Chúng ta phải phân tích các hậu quả nhiều hơn là chỉ ra các ích lợi của công việc này. Việc chỉ trước ra những hậu quả nhằm tránh tối đa các sai lầm như đã phạm phải trong quá khứ.
    Trước tiên cần phân biệt rõ hai vấn đề khác hẳn nhau: thứ nhất, đó là bộ mã chữ Việt theo tiêu chuẩn TCVN-6909 và thứ hai là Quyết Định của Chính Phủ về thời gian, phương thức và cách thức thực thi tiêu chuẩn này tại Việt Nam.

    Về vấn đề thứ nhất, bộ mã chữ Việt theo tiêu chuẩn TCVN-6909-2001 (TCVN6909), tôi có một số ý kiến sau:
    1. Chúng ta đang nói về một “bảng mã” của các ký tự tiếng Việt nằm trong khuôn khổ của bảng mã Unicode (hay ISO-10646) 16-bit, không nên lẫn lộn với các bảng mã 8-bit của Việt Nam hay của bất kỳ một quốc gia, công ty nào. CP1258 là một bảng mã ký tự 8-bit và do đó nó không có liên quan gì đến cái chúng ta đang bàn ở đây. Khi nhắc đến các bảng mã 8-bit, người ta thường có sự so sánh (ánh xạ) với các mã ký tự tương ứng của ISO-10646 mà thôi.

    2. Chúng ta cần hiểu thật đúng từ hay khái niệm “bảng mã”. Bảng mã được hiểu đơn giản là một ánh xạ giữa một tập hợp các ký tự (mỗi ký tự sẽ có một tên duy nhất của mình, ký tự - character) và tập hợp các số tự nhiên (được gọi là mã - code). Nếu các mã này biểu diễn bởi 8-bit thì bảng mã này là 8-bit, nếu mã được biểu diễn 16-bit thì bảng mã sẽ là 16-bit. Cần phân biệt rõ 3 khái niệm (từ) sau: Chữ Cái (viết), Ký Tự (tổng quát) và Con Chữ. Chữ Cái (viết) là một đơn vị trong bảng chữ cái (viết) của ngôn ngữ một quốc gia hay dân tộc (ví dụ chữ Đ trong tiếng Việt). Ký Tự là một đơn vị xác định trong một bảng mã chuẩn; trong một bảng mã Ký Tự luôn gắn liền với Mã của mình (ví dụ ký tự “LATIN CAPITAL LETTER D WITH STROKE” gắn với mã 0110). Con Chữ là thể hiện (có thể có khuôn dạng) của một hoặc một vài ký tự trong bảng mã. Ví dụ trong Unicode có 3 ký tự có thể hiện giống nhau và giống chữ cái Đ của Việt Nam là:

    Mã        Tên ký tự

    00D0      LATIN CAPITAL LETTER ETH

    0110      LATIN CAPITAL LETTER D WITH STROKE

    0189      LATIN CAPITAL LETTER AFRICAN D

    Chú ý: Thật ra Unicode định nghĩa khái niệm Ký Tự phức tạp hơn nhiều vì nó phải hỗ trợ cho rất nhiều ngôn ngữ khác nhau trên thế giới. Có nhiều khái niệm như Ký Tự Cơ Sở, Ký Tự Tổ Hợp, Ký Tự Dấu và có rất nhiều tính chất đi kèm với Ký Tự như khuôn dạng, hướng, đối xứng,... Tuy nhiên đối với tiếng Việt, hay chính xác hơn là vùng mã trong Unicode có liên quan đến tiếng Việt, không gặp phải những phức tạp hay khó khăn nào (rất may!). Hy vọng rằng sẽ có những bài viết kỹ hơn về vấn đề này.

    3. Đối với “bảng mã 8-bit” chúng ta cần tìm ra một ánh xạ từ một tập các chữ tiếng Việt vào tập các số tự nhiên của bảng mã này. Do số lượng chữ Việt nhiều hơn vùng số có thể ánh xạ đối với 8-bit cho nên mới nảy sinh ra các tranh cãi, bàn luận và thống nhất về một “Bảng mã tiếng Việt 8-bit”. Công cuộc thống nhất này đã không thành công và kết quả là trên đất nước Việt Nam tồn tại nhiều “bảng mã tiếng Việt 8-bit” (như TCVN 5712, ABC, VNI, CP1258...). Nhưng đối với “bảng mã 16-bit” thì sẽ không bao giờ có chuyện đã xảy ra như đối với 8-bit. Bảng mã Unicode hay ISO-10646 16-bit mã hóa được trên 65 nghìn ký tự. Mỗi ký tự sau khi đã được mã hóa trong bảng này sẽ cố định vĩnh viễn, không bao giờ thay đổi được nữa. Do vậy đối với “bảng mã 16-bit”, vấn đề hoàn toàn không phải như “8-bit” là mã hóa như thế nào. Vấn đề thực chất ở đây là chúng ta phải chọn những mã nào trong một rừng mênh mông (trên 65 nghìn) ký tự đã có để xác định đó là thích hợp với Việt Nam và khuyến cáo người Việt Nam dùng chúng. Ví dụ trên thấy trong bảng mã ISO-10646 có 3 ký tự giống chữ Đ của Việt Nam, vậy thì chúng ta nên và phải dùng ký tự nào trong chúng? Chúng ta chỉ nên dùng một, bắt buộc phải dùng một hay có thể dùng cả ba? Đây chính là vấn đề cần bàn luận, tranh cãi và phải đi đến thống nhất. Câu trả lời theo tôi là gần như hiển nhiên đứng trên góc độ quản lý vĩ mô và lợi ích quốc gia: chúng ta nên dùng và chỉ nên dùng đúng một trong ba mã trên cho chữ Đ. Cần tránh những lý luận “ba phải” kiểu như: cả ba ký tự trên đều rất hay và chúng ta cần dùng cả ba. Thật nguy hiểm (và lần này thì chết luôn) nếu như bài học của ABC, VNI được lặp lại với tiếng Việt 16-bit: miền Bắc dùng một nhóm ký tự (dựng sẵn), miền Trung dùng một nhóm ký tự khác xen kẽ ký tự tổ hợp, miền Nam lại dùng một nhóm ký tự tổ hợp khác. Nếu hiện tượng đó xảy ra thì là Đại Họa cho đất nước và dân tộc. Như vậy vấn đề tranh cãi chỉ là chúng ta sẽ dùng ký tự nào trong ba ký tự trên: 00D0, 0110 hay 0189?  Theo tôi chúng ta có thể tranh cãi để dẫn đến thống nhất, cùng lắm là thống nhất bằng cách bỏ phiếu kín (!).

    4. Về vấn đề “Unicode Dựng Sẵn hay Tổ Hợp” mà một số anh đã tham gia tranh luận, tôi có ý kiến như sau: quay lại lịch sử bảng mã tiếng Việt 8-bit, do thiếu vùng mã số để định nghĩa ký tự tiếng Việt nên khái niệm Mã tổ hợp, Ký tự tổ hợp đã được đưa ra để giải quyết vấn đề bảng mã tiếng Việt. Ví dụ trong bảng mã của chúng ta không có ký tự Ề nhưng chúng ta có ký tự Ê và ký tự ‘ (dấu huyền). Do vậy để thu được chữ Ề chúng ta ghép (tổ hợp) hai mã là Ê và ‘. Chúng ta đã quen dùng với những cụm từ như Mã tổ hợp, Ký tự tổ hợp mà ít khi để ý đến căn nguyên của chúng. Theo tôi trong Unicode không có khái niệm về Ký tự dựng sẵn, Mã Unicode dựng sẵn cũng như Mã Unicode tổ hợp, Ký tự Unicode tổ hợp hiểu theo nghĩa thông thường. Trong Unicode chỉ có khái niệm Tổ hợp các ký tự hay Dãy các ký tự. Unicode cho phép thể hiện một dãy các ký tự, trong đó ký tự đầu tiên là ký tự cơ sở (base character), các ký tự tiếp theo thông thường là không chiếm chỗ và nằm ngay trong vùng không gian của ký tự cơ sở (ở phía trên hoặc dưới, phải hoặc trái), các ký tự này được gọi là ký tự tổ hợp (combining character). Ví dụ của các ký tự như vậy đối với Việt Nam là 5 ký tự dấu (sắc, huyền, hỏi, ngã, nặng) và 3 ký tự liên kết (dấu móc, dấu trăng và dấu mũ). Một ký tự Unicode có thể biểu diễn tương đương với nhiều cách khai triển thành dãy các ký tự khác. Ví dụ chúng ta có ký tự Ề với 3 cách thể hiện như bảng 1.

    Về lý thuyết chúng ta có thể định nghĩa và chọn chữ Ề của tiếng Việt theo một trong 3 cách trên, cách thứ nhất mọi người vẫn gọi là “Mã dựng sẵn”, hai cách sau được gọi đơn giản là “Mã tổ hợp”, việc dùng thống nhất cách nào cũng có thể bằng phương pháp “bỏ phiếu kín” như tôi đã nói ở trên. Tuy nhiên phải nói ngay ở đây rằng việc dùng tổ hợp các ký tự để thay thế cho một chữ nào đó chỉ là biện pháp bất đắc dĩ vì chữ đó không được mã hoá. Còn đối với ISO-10646 hay Bảng mã Unicode thì làm gì có chuyện đó, tất cả các chữ tiếng Việt (bao gồm bảng chữ cái và nguyên âm có dấu) đều đã được mã hóa đầy đủ trong bảng mã 16-bit này. Vì sao chúng ta lại phải dùng phương án “tổ hợp ký tự”? (Ở đây tôi trình bày một cách đơn giản vì không muốn đi sâu vào các vấn đề kỹ thuật). Do vậy theo tôi phương án chọn “Mã dựng sẵn” của Unicode là hợp lý và đúng đắn nhất. Trên thực tế tất cả các đơn vị, cơ sở, web site tại Việt Nam hiện nay nếu đang dùng Unicode thì đều dùng cái “mã dựng sẵn” này cả. Về cách chọn vùng mã Unicode và phương án “mã dựng sẵn” của TCVN6909, tôi hoàn toàn nhất trí với dự thảo của tiêu chuẩn này.

    5. Nếu được phép góp ý kiến thì tôi đề nghị tránh dùng câu “bảng mã tiếng Việt 16-bit” hay “bộ mã ký tự tiếng Việt 16-bit” vì điều đó sẽ dẫn đến hiểu lầm là chúng ta đã định nghĩa được một cách mã hóa tiếng Việt 16-bit làm tiêu chuẩn trong số nhiều phương án khác nhau. Nên dùng cụm từ “bộ ký tự tiếng Việt (chuẩn) trong bảng mã Unicode” hoặc “bộ ký tự tiếng Việt (chuẩn) trong bảng mã ISO-10646” thì sẽ hợp lý hơn.

    Về vấn đề thứ hai, qui định của Chính Phủ thực thi tiêu chuẩn này, tôi có một số ý kiến sau:
    1. Trước tiên chúng ta cần hiểu hơn một chút về “Unicode” (và về ISO-10646). Vì sao người ta không nói một phần mềm có “hỗ trợ ISO-10646” mà chỉ nói “hỗ trợ Unicode”? Nếu như ISO-10646 chỉ đơn thuần là một bảng mã ký tự 16-bit thì Unicode là cả một khối đồ sộ các kiến thức, khái niệm, thuật toán, phần mềm, công nghệ, chuẩn nhằm giúp đưa bộ mã 16-bit này vào cuộc sống. Unicode đã ra đời cách đây 15 năm và vẫn đang phát triển không ngừng. Việc áp dụng Unicode vào thực tế đã và đang gặp phải rất nhiều khó khăn, trở ngại. Thậm chí thế nào là “sử dụng Unicode” hay “hỗ trợ Unicode” cũng đang được bàn cãi, tranh luận và được hiểu theo nhiều nghĩa khác nhau.Vì vậy việc “bắt buộc” áp dụng hay sử dụng Unicode tại Việt Nam trong thời điểm hiện tại là điều không tưởng và sẽ là một sai lầm khủng khiếp. Nếu có một chỉ thị như vậy ra đời sẽ kéo theo việc tràn lan “chuyển đổi” sang Unicode, không những vô cùng lãng phí mà còn không có hiệu quả.

    2. Sau khi đã có TCVN qui định về bộ ký tự chuẩn tiếng Việt 16-bit, chúng ta cần rất thận trọng khi tiến hành áp dụng trên thực tế. Cần thiết phải tổ chức nhiều hội thảo, nhiều seminar về các vấn đề hay kinh nghiệm áp dụng Unicode trên thực tế. Nếu Chính Phủ dự kiến ban hành một cái gì đó thì theo tôi chỉ nên: (1) khuyến cáo các cơ quan, doanh nghiệp nếu có điều kiện thì nên tiến hành áp dụng Unicode theo TCVN mới; (2) trong một khung cảnh cụ thể nào đó, ví dụ các công văn, văn bản hành chính thì có thể qui định cụ thể cách dùng Unicode cho tiếng Việt và nên áp dụng thử nghiệm trong một phạm vi hẹp. Việc áp dụng Unicode ở mức ứng dụng, đặc biệt là CSDL, là một việc làm rất phức tạp, phải hết sức thận trọng.
    Tôi xin kết thúc bài viết “tranh luận” ở đây. Thật ra có rất nhiều điều muốn trình bày và phân tích kỹ hơn, mong rằng sẽ được thể hiện trong các bài viết khác. Nhân đây tôi muốn giới thiệu với các bạn một phần mềm gõ bàn phím tiếng Việt rất hay, nhỏ gọn, hỗ trợ cho các bảng mã tiếng Việt 8-bit như TCVN3 (ABC), VNI và Unicode (dựng sẵn!). Đó là Unikey. Phần mềm này là mã nguồn mở và hoàn toàn miễn phí. Bản thân tôi đang dùng Unikey và rất hài lòng về phần mềm này. Tác giả của phần mềm là Phạm Kim Long, đại học kỹ thuật Praha. Các bạn có thể download phần mềm này tại địa chỉ http://unikey.hypermart.net.

    Về tác giả. Bùi Việt Hà là giám đốc công ty School@Net, chuyên cung cấp các sản phẩm phần mềm, CD-ROM phục vụ công tác giáo dục, giảng dạy trong nhà trường. Liên hệ tại school.net@hn.vnn.vn

    ID: A0206_38