Unicode – Wikipedia tiếng Việt

Unicode (hay gọi là mã thống nhất; mã đơn nhất) là bộ mã chuẩn quốc tế được thiết kế để dùng làm bộ mã duy nhất cho tất cả các ngôn ngữ khác nhau trên thế giới, kể cả các ngôn ngữ sử dụng ký tự tượng hình phức tạp như chữ Hán của tiếng Trung Quốc, tiếng Nhật, chữ Nôm của tiếng Việt, v.v. Vì những điểm ưu việt đó, Unicode đã và đang từng bước thay thế các bộ mã truyền thống, kể cả bộ mã tiêu chuẩn ISO 8859. Unicode đang được sử dụng trên rất nhiều phần mềm cũng như các trình ứng dụng, chẳng hạn Windows.

Phiên bản mới nhất là Unicode ® 13.0.0 công bố ngày 10 tháng 3 năm 2020 .
Logo của Unicode

Thương Hội Unicode[sửa|sửa mã nguồn]

Hiệp hội Unicode ở California xuất bản phiên bản đầu tiên của The Unicode Standard (Tiêu chuẩn Unicode) vào năm 1991, và vẫn liên tục hoàn thiện chuẩn (hiện nay đã đến phiên bản 4.0). Các phiên bản mới được viết dựa trên các phiên bản đã có, nhờ vậy đảm bảo được tính tương thích. Cũng xin lưu ý rằng Unicode và tiêu chuẩn ISO 10646 là hai khái niệm hoàn toàn độc lập. Khi nói đến ISO 10646 tức là người ta đang nói đến tiêu chuẩn quốc tế chính thức, còn Unicode thì được Unicode Consortium (tập hợp đại diện các công ty tin học lớn) soạn ra. Kể từ năm 1991, khi Nhóm làm việc ISO và Liên đoàn Unicode quyết định hợp tác chặt chẽ với nhau trong quá trình nâng cấp và mở rộng chuẩn để đảm bảo tính tương thích (cụ thể là vị trí của các ký tự trên cả hai đều y hệt nhau – chẳng hạn chữ ơ01A1). Còn với Unicode thì lại khác, chuẩn này được phát triển bởi Liên đoàn Unicode. Liên đoàn Unicode là một tổ chức phi lợi nhuận tập hợp bởi một số công ty, trong đó có cả những công ty đa quốc gia khổng lồ có ảnh hưởng lớn như Microsoft, Adobe Systems, IBM, Novell, Sun Microsystems, Lotus Software, Symantec và Unisys. (Danh sách đầy đủ tại: [1]). Tuy nhiên, chuẩn Unicode không chỉ quy định bộ mã, mà còn cả cách dựng hình, cách mã hóa (sử dụng 1, 2, 3 hay 4 byte để biểu diễn một ký tự (UTF-8 là một ví dụ), sự tương quan (collation) giữa các ký tự, và nhiều đặc tính khác của các ký tự, hỗ trợ cả những ngôn ngữ từ phải sang trái như tiếng Ả Rập chẳng hạn.

Unicode chiếm trước 1.114.112 ( = 220 + 216 ) mã chữ, và lúc bấy giờ đã gán ký hiệu cho hơn 96000 mã chữ. 256 mã tiên phong tương thích với ISO 8859 – 1, là cách mã hóa ký tự thông dụng nhất trong ” quốc tế phương Tây ” ; do đó, 128 ký tự tiên phong còn được định danh theo ASCII .

Không gian mã Unicode cho các ký tự được chia thành 17 mặt phẳng (plane) và mỗi mặt phẳng có 65536 code point. Mặt phẳng đầu tiên (plane 0), “Mặt phẳng đa ngôn ngữ căn bản” (Basic Multilingual Plane – BMP), là nơi mà đa số các ký hiệu được gán mã. BMP chứa các ký hiệu cho hầu hết các ngôn ngữ hiện đại, và một số lượng lớn các ký tự đặc biệt. Đa số các code point được phân bố trong BMP được dùng để mã hóa các ngôn ngữ CJKV (Hán-Nhật-Hàn-Việt).

Hai mặt phẳng tiếp theo được dùng cho các ký tự “đồ họa”. Mặt phẳng 1, “Mặt phẳng đa ngôn ngữ bổ sung” (Supplementary Multilingual Plane – SMP), được dùng chủ yếu cho các loại chữ viết cổ, ví dụ Egyptian hieroglyph (chưa được mã hóa), nhưng cũng còn được dùng cho các ký hiệu âm nhạc. Mặt phẳng 2, (Supplementary Ideographic Plane – SIP), được dùng cho khoảng 40000 chữ Trung Quốc ít gặp mà đa số là các ký hiệu cổ, ngoài ra cũng có một số ký hiệu hiện đại. Mặt phẳng 14 hiện chứa một số các ký tự thẻ ngôn ngữ không được khuyến khích và một số ký hiệu lựa chọn biến thể. Mặt phẳng 15 và Mặt phẳng 16 được mở cho các sử dụng cá nhân.

Vẫn còn nhiều tranh luận giữa những chuyên viên về ngôn từ CJK ( Hoa-Nhật-Hàn ), đặc biệt quan trọng là những chuyên viên người Nhật, về nhu yếu và quyền lợi kỹ thuật của việc ” thống nhất chữ Hoa “, tức là việc chuyển những bộ chữ Hoa và chữ Nhật vào trong một bộ chữ hợp nhất. ( Xem thêm mã hóa chữ Hoa )Kho ≈ 220 điểm mã bảo vệ sự thích hợp với bộ mã UTF-16. Việc mới chỉ dùng hết có 10 % kho chữ cho thấy rằng kho chữ cỡ ≈ 20 bit này khó bị đầy trong một tương lai gần .

Các bảng mã[sửa|sửa mã nguồn]

Đọc từ đầu tới giờ, tất cả chúng ta chỉ mới biết rằng Unicode là một cách để đánh số duy nhất cho toàn bộ những ký tự được dùng bởi con người trong ngôn từ viết. Nhưng những số lượng đó được ghi trong những mạng lưới hệ thống giải quyết và xử lý văn bản lại là những yếu tố khác ; những yếu tố đó là hậu quả của việc phần đông những ứng dụng ở phương Tây chỉ biết tới những mạng lưới hệ thống mã hóa 8 – bit, và việc đưa Unicode vào những ứng dụng chỉ mới diễn ra lừ đừ trong những năm gần đây .Các chương trình 8 – bit cũ chỉ phân biệt những ký tự 8 bit, và không hề dùng nhiều hơn 256 điểm mã nếu không có những cách xử lý đặc biệt quan trọng. Do đó người ta phải đề ra nhiều chính sách để dùng Unicode ; tùy thuộc vào năng lực tàng trữ, sự thích hợp với chương trình nguồn và sự tương tác với những mạng lưới hệ thống khác mà mỗi người chọn một chính sách .
Cách đơn thuần nhất để tàng trữ tổng thể những 220 + 216 Unicode code points là sử dụng 32 bit cho mỗi ký tự, nghĩa là, 4 byte – do đó, cách mã hóa này được Unicode gọi là UTF-32 và ISO / IEC 10646 gọi là UCS-4. Vấn đề chính của cách này là nó hao chỗ hơn 4 lần so với trước kia, do đó nó ít được dùng trong những vật nhớ ngoài ( như đĩa, băng ). Tuy nhiên, nó rất đơn thuần, nên 1 số ít chương trình sẽ sử dụng mã hóa 32 bit bên trong khi giải quyết và xử lý Unicode .

UTF-16 là một cách mã hóa dùng Unicode 20 bit. Các ký tự trong BMP được diễn tả bằng cách dùng giá trị 16-bit của code point trong Unicode CCS. Có hai cách để viết giá trị 16 bit trong một dòng (stream) 8-bit. Có lẽ bạn đã nghe qua chữ endian. Big Endian có nghĩa là cho Most Significant Byte đi trước, tức là nằm bên trái – do đó ta có UTF-16BE. Còn Little Endian thì ngược lại, tức là Least Significant Byte đi trước – do đó ta có UTF-16LE. Thí dụ, giá trị 16-bit của con số Hex1234 được viết là Hex12 Hex34 trong Big Endian và Hex34 Hex12 trong Little Endian.

Những ký hiệu không nằm trong BMP được biểu diễn bằng cách dùng surrogate pair (cặp thay thế). Code points có giá trị từ U+D800 đến U+DFFF được dành riêng ra để dùng cho mục đích này. Trước hết, một code point có 20 bit được phân ra làm hai nhóm 10 bit. Nhóm Most Significant 10 bit được map vào một giá trị 10 bit nằm trong khoảng từ u+D800 đến u+DBFF. Nhóm Least Significant 10 bit được map vào một giá trị 10 bit nằm trong khoảng từ U+DC00 đến U+DFFF. Theo cách đó UTF-16 có thể biểu diễn được những ký hiệu Unicode có 20 bit.

UTF-8 là một cách mã hóa để có tính năng giống như UCS-4 ( cũng là UTF-16 ), chứ không phải có code point nào khác. UTF-8 được phong cách thiết kế để thích hợp với chuẩn ASCII. UTF-8 hoàn toàn có thể sử dụng từ một ( cho những ký tự trong ASCII ) cho đến 6 byte để trình diễn một ký tự .

Chính vì tương thích với ASCII, UTF-8 cực kỳ có lợi thế khi được sử dụng để bổ sung hỗ trợ Unicode cho các phần mềm có sẵn. Thêm vào đó, các nhà phát triển phần mềm vẫn có thể sử dụng các hàm thư viện có sẵn của ngôn ngữ lập trình C để so sánh (comparisons) và xếp thứ tự. (Ngược lại, để hỗ trợ các cách mã hóa 16 bit hay 32 bit như ở trên, một số lớn phần mềm buộc phải viết lại do đó tốn rất nhiều công sức. Một điểm mạnh nữa của UTF-8 là với các văn bản chỉ có một số ít các ký tự ngoài ASCII, hay thậm chí cho các ngôn ngữ dùng bảng chữ cái Latinh như tiếng Việt, tiếng Pháp, tiếng Tây Ban Nha, v.v.; cách mã hóa kiểu này cực kỳ tiết kiệm không gian lưu trữ.

UTF-8 được phong cách thiết kế bảo vệ không có chuỗi byte của ký tự nào lại nằm trong một chuỗi của ký tự khác dài hơn. Điều này khiến cho việc tìm kiếm ký tự theo byte trong một văn bản là rất thuận tiện. Một số dạng mã hóa khác ( như Shift-JIS ) không có đặc thù này khiến cho việc giải quyết và xử lý chuỗi ký tự trở nên phức tạp hơn nhiều. Mặc dù để triển khai điều này yên cầu phải có độ dư ( văn bản sẽ dài thêm ) nhưng những ưu điểm mà nó mang lại vẫn nhiều hơn. Việc nén tài liệu không phải là mục tiêu hướng tới của Unicode và việc này cần được thực thi một cách độc lập .

Các quy định chính xác của UTF-8 như sau (các số bắt đầu bằng 0x là các số biểu diễn trong hệ thập lục phân)

  • Các ký tự có giá trị nhỏ hơn 0x80, sử dụng 1 byte có cùng giá trị.
  • Các ký tự có giá trị nhỏ hơn 0x800, sử dụng 2 byte: byte thứ nhất có giá trị 0xC0 cộng với 5 bit từ thứ 7 tới 11 (7th-11th least significant bits); byte thứ hai có giá trị 0x80 cộng với các bit từ thứ 1 tới thứ 6 (1st-6th least significant bits).
  • Các ký tự có giá trị nhỏ hơn 0x10000, sử dụng 3 byte: byte thứ nhất có giá trị 0xE0 cộng với 4 bit từ thứ 13 tới 16; byte thứ hai có giá trị 0x80 cộng với 6 bit từ thứ 7 tới 12; byte thứ ba có giá trị 0x80 cộng với 6 bit từ thứ 1 tới thứ 6.
  • Các ký tự có giá trị nhỏ hơn 0x200000, sử dụng 4 byte: byte thứ nhất có giá trị 0xF0 cộng với 3 bit từ thứ 19 tới 21; byte thứ hai có giá trị 0x80 cộng với 6 bit từ thứ 13 tới 18; byte thứ ba có giá trị 0x80 cộng với 6 bit từ thứ 7 tới thứ 12; byte thứ tư có giá trị 0x80 cộng với 6 bit từ thứ 1 tới thứ 6.

Hiện nay, những giá trị khác ngoài những giá trị trên đều chưa được sử dụng. Tuy nhiên, những chuỗi ký tự dài tới 6 byte hoàn toàn có thể được dùng trong tương lai .

  • Chuỗi 5 byte sẽ lưu trữ được mã ký tự chứa đến 26 bit: byte thứ nhất có giá trị 0xF8 cộng với 2 bit thứ 25 và 26, các byte tiếp theo lưu giá trị 0x80 cộng với 6 bit có ý nghĩa tiếp theo.
  • Chuỗi 6 byte sẽ lưu trữ được mã ký tự chứa đến 31 bit: byte thứ nhất có giá trị 0xFC cộng với bit thứ 31, các byte tiếp theo lưu giá trị 0x80 cộng với 6 bit có ý nghĩa tiếp theo.

Chuẩn hóa được ít dùng nhất có lẽ rằng là UTF-7. Chuẩn MIME nhu yếu mọi thư điện tử phải được gửi dưới dạng ASCII vì vậy những thư điện tử nào sử dụng mã hóa Unicode được coi là không hợp lệ. Tuy nhiên hạn chế này thường bị hầu hết mọi người bỏ lỡ. UTF-8 được cho phép thư điện tử sử dụng Unicode và đồng thời cũng tương thích với tiêu chuẩn. Các ký hiệu ASCII sẽ được giữ nguyên, tuy nhiên những ký tự khác ngoài 128 ký hiệu ASCII chuẩn sẽ được mã hóa bằng một escape sequence hay một dấu ‘ + ‘ theo sau một ký tự Unicode được mã hóa bằng Base64, và kết thúc bằng một dấu ‘ – ‘. Ký tự ‘ + ‘ nổi tiếng sẽ được mã hóa thành ‘ + – ‘ .

Các yếu tố khác[sửa|sửa mã nguồn]

Tiêu chuẩn Unicode còn gồm có 1 số ít yếu tố có tương quan, ví dụ điển hình character properties, text normalisation forms và bidirectional display order ( để hiển thị chính xác những văn bản chứa cả hai loại ngôn từ có cách viết từ phải qua trái như tiếng Ả Rập hay tiếng Hebrew ) và trái qua phải .

Unicode trên mạng toàn thế giới[sửa|sửa mã nguồn]

Hầu hết những website tiếng Việt sử dụng cách mã hóa UTF-8 để bảo vệ tính thích hợp, tuy nhiên 1 số ít website vẫn còn giữ cách mã hóa theo chuẩn ISO-8859-1 cũ. Các trình duyệt văn minh thời nay như Mozilla Firefox có tính năng tự động hóa chọn cách mã hoá ( encoding ) thích hợp nếu như máy tính đã được setup một font thích hợp ( xem thêm Unicode và HTML ) .

Mặc dù các quy tắc cú pháp có thể ảnh hưởng tới thứ tự xuất hiện của các ký tự nhưng các văn bản HTML 4.0 và XML 1.0 đều có thể bao trùm hầu hết các ký tự trong Unicode, chỉ trừ một số lượng nhỏ ký tự điều khiển và dãy chưa được gán D800-DFFF và FFFE-FFFF. Các ký tự này biểu thị hoặc là các byte nếu bộ mã có định nghĩa hoặc là chuỗi số của Unicode nếu bộ mã không định nghĩa. Chẳng hạn: Δ Й ק م sẽ được hiển thị là Δ, Й, ק, م, ๗, ぁ, 叶, 葉 và 냻 nếu máy tính đã có cài đặt font thích hợp. Các ký tự này lần lượt là chữ “Delta” trong bảng chữ cái Hy Lạp, “I ngắn” trong bảng chữ cái Cyril, “Meem” trong bảng chữ cái Ả Rập, “Qof” trong bảng chữ cái Hebrew, số 7 trong bảng chữ cái Thái, Hiragana “A” của tiếng Nhật, chữ Hán “diệp” giản thể, chữ Hán “diệp” phồn thể và âm “Nyrh” bằng Hangul trong tiếng Hàn/Triều Tiên.

Các phông chữ Unicode[sửa|sửa mã nguồn]

Phông chữ Unicode hoàn toàn có thể được tải về từ nhiều trang web, hầu hết chúng là không lấy phí. Dù đã có hàng ngàn phông chữ trên thị trường, nhưng hầu hết chỉ tương hỗ ở một mức độ nhất định một số ít ký hiệu ngoài ASCII của Unicode. Thay vì đó, những phông chữ Unicode thường tập trung chuyên sâu tương hỗ những ký tự ASCII và những chữ viết đơn cử hoặc tập những ký tự hay ký hiệu. Có vài nguyên do của điều này : những ứng dụng và tài liệu rất ít khi cần hiển thị ký tự từ nhiều hơn hai mạng lưới hệ thống chữ viết ; phông chữ thường là những tập không rất đầy đủ ; hệ quản lý và điều hành và những ứng dụng ngày càng giải quyết và xử lý tốt hơn những ký tự từ nhiều bộ phông khác nhau … Thêm vào nữa, việc phong cách thiết kế một mạng lưới hệ thống cụ thể hàng nghìn ký tự là việc làm yên cầu nhiều thời hạn và công sức của con người trong khi phần nhiều không thu lợi gì từ việc này ….Phông chữ Unicode được cho phép gõ tiếng Việt ở những phông Times New Roman hay Tahoma hay Arial

Lịch sử những phiên bản Unicode[sửa|sửa mã nguồn]

Phiên bản tiêu chuẩn Unicode sau dự kiến là phiên bản 8.0 vào mùa hè năm năm ngoái. [ 2 ]

  1. ^

    Số ký tự của một phiên bản Unicode là tổng số ký tự viết, định dạng, và điểu khiển (tức trừ các ký tự dùng riêng, những gì không phải là ký tự, và các điểm mã cặp).

  2. ^ Unicode Consortium (ngày 24 tháng 2 năm 2014). “Unicode Liaison Report to WG2” ( PDF ). ISO/IEC JTC1/SC2/WG2 .

Liên kết ngoài[sửa|sửa mã nguồn]

5/5 - (1 vote)

Bài viết liên quan

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments