Unicode là gì: Hướng dẫn đầy đủ, cách sử dụng và mã hóa

Cập nhật lần cuối: 20 Tháng Tám 2025
  • Unicode gán một điểm mã duy nhất cho mỗi ký tự và đồng bộ hóa kho mã của nó với ISO/IEC 10646.
  • UTF-8, UTF-16 và UTF-32 mã hóa cùng một ký tự và cho phép chuyển đổi không mất dữ liệu.
  • Các thuộc tính chuẩn hóa, Bidi và UCD đảm bảo sự so sánh, sắp xếp và hiển thị nhất quán.
  • Việc áp dụng Unicode (tốt nhất là UTF-8 trên web) giúp ngăn ngừa lỗi và tạo điều kiện thuận lợi cho việc quốc tế hóa.

Minh họa chung về Unicode

Unicode là ngôn ngữ chung mà máy tính sử dụng khi xử lý văn bản : nó gán một số duy nhất cho mỗi ký tự và biểu tượng, từ hầu hết mọi hệ thống chữ viết, để có thể lưu trữ, xử lý và chia sẻ liền mạch giữa các nền tảng và quốc gia.

Tiêu chuẩn này ra đời để khắc phục những hạn chế của các bộ ký tự cũ ( bộ ASCII , bảng mã, EBCDIC, v.v.), vốn không đáp ứng được yêu cầu hoặc không tương thích với nhau, và ngày nay nó được đồng bộ hóa với ISO/IEC 10646, duy trì các thuật toán (như thuật toán hai chiều) và định nghĩa các thuộc tính và quy tắc chuẩn hóa để mọi thứ hoạt động nhất quán.

Unicode là gì và tại sao nó lại quan trọng như vậy?

Unicode là một tiêu chuẩn mã hóa ký tự phổ quát và liên tục phát triển, mô tả mỗi ký tự bằng tên, mã điểm và một tập hợp các thuộc tính (hệ chữ viết, loại, hướng, chữ hoa/chữ thường, v.v.). Ủy ban Kỹ thuật Unicode (UTC), thuộc Hiệp hội Unicode, đảm bảo tiêu chuẩn này luôn đồng bộ với tiêu chuẩn ISO/IEC 10646.

Mục tiêu của nó là tính phổ quát, tính đồng nhất và tính duy nhất : một kho tàng ngôn ngữ rộng lớn cho phép trao đổi văn bản đa ngôn ngữ một cách rõ ràng, với các quy tắc rõ ràng và có thể tái tạo. Nhờ đó, các công nghệ hiện đại (hệ điều hành, trình duyệt, XML, Java, cơ sở dữ liệu) có thể kết hợp chữ Latinh và chữ Ả Rập, chữ tượng hình CJK, biểu tượng cảm xúc và các ký hiệu kỹ thuật hoặc âm nhạc trong cùng một tài liệu.

Ký tự, ký tự tượng hình và điểm mã

Trong Unicode, ký tự là một đơn vị thông tin trừu tượng, và mã điểm là mã số nhận dạng của nó . Hình ảnh (glyph) là dạng trực quan (những gì bạn thấy trên màn hình), tùy thuộc vào phông chữ . Một ký tự có thể có nhiều hình ảnh (glyph), và đôi khi một hình ảnh (glyph) đại diện cho nhiều hơn một ký tự.

Ký hiệu thông thường cho một điểm mã là U+XXXX trong hệ thập lục phân . Các ví dụ minh họa từ tài liệu đã phân tích: chữ 'l' viết thường là U+006C, chữ 'ü' viết thường ghép sẵn là U+00FC, chữ 'é' là U+00E9 và chữ beta trong tiếng Hy Lạp: chữ hoa là U+0392 và chữ thường là U+03B2 (trong một số văn bản, 'β' được trích dẫn với U+0392, nhưng mã đó tương ứng với chữ 'Β' viết hoa).

Không gian mã Unicode có 1.114.112 vị trí khả dụng (lên đến U+10FFFF) , được tổ chức để bao phủ và phân loại tất cả các hệ thống chữ viết và ký hiệu, với hàng chục nghìn vị trí được gán hiệu quả và đang tăng lên trong mỗi phiên bản.

Kế hoạch, diện tích và khối

Unicode chia không gian ký tự của mình thành 17 mặt phẳng, mỗi mặt phẳng có tối đa 65.536 điểm mã . Cách tổ chức này giúp dễ dàng nhóm các hệ chữ viết và ký hiệu liên quan lại với nhau và nhanh chóng tìm thấy những gì bạn đang tìm kiếm.

Các mặt phẳng quan trọng nhất : Mặt phẳng Đa ngôn ngữ Cơ bản (BMP, mặt phẳng 0) tập hợp hầu hết các bảng chữ cái hiện đại và nhiều ký hiệu; Mặt phẳng Đa ngôn ngữ Bổ sung (SMP, mặt phẳng 1) lưu trữ các hệ thống chữ viết lịch sử và các ký hiệu kỹ thuật (ví dụ: âm nhạc và toán học); Mặt phẳng Chữ tượng hình Bổ sung (SIP, mặt phẳng 2) mở rộng các chữ tượng hình CJK; mặt phẳng 14 (SSP) bao gồm các nhãn đặc biệt; và mặt phẳng 15 và 16 dành cho mục đích sử dụng cá nhân.

Khối và khu vực : các bản đồ được chia không chính thức thành các khu vực và chính thức thành các khối liền kề. Các khối được sử dụng để lập bảng và ghi chép các ký tự, mặc dù chúng không phải lúc nào cũng tương ứng với các nhóm ngôn ngữ có ý nghĩa.

  Lợi ích không thể bàn cãi của Mạng xã hội

Ký hiệu CJK và dự án Unihan

Các chữ tượng hình Đông Á (người Hán) được thống nhất trong Unicode với các biến thể về kiểu dáng theo từng khu vực , nhưng tất cả đều đề cập đến cùng một ký tự trừu tượng. Việc quản lý chúng được thực hiện bởi Nhóm Báo cáo Chữ tượng hình (IRG), một nhóm ISO/IEC JTC1/SC2/WG2 với đại diện từ Trung Quốc, Nhật Bản, Hàn Quốc, Việt Nam, Hồng Kông, Ma Cao, Singapore, Hoa Kỳ và các nước khác.

Cơ sở dữ liệu Unihan tập hợp các thông tin bổ trợ (cách đọc, ý nghĩa, sự tương đương) cần thiết để xử lý các chữ tượng hình này trong các ngôn ngữ khác nhau và theo các tiêu chuẩn lịch sử hoặc doanh nghiệp.

Các khối CJK chính và phần mở rộng :

  • Chữ tượng hình thống nhất CJK (BMP, U+4E00–U+9FFF): 20.992 ký tự thường dùng.
  • Phần mở rộng A (BMP, U+3400–U+4DBF): 6.592 chữ tượng hình ít phổ biến hơn.
  • Phần mở rộng B–H: trong SMP/SIP/TIP, chúng cộng lại thành hàng chục nghìn nữa (B: U+20000–U+2A6DF, 42.720; C: U+2A700–U+2B73F, 4.154; D: U+2B740–U+2B81F, 222; E: U+2B820–U+2CEAF, 5.762; F: U+2CEB0–U+2EBEF, 7.473; G: U+30000–U+3134F, 4.939;
  • Các khối CJK liên quan khác: Bộ thủ Khang Hy (U+2F00–U+2FDF), ký hiệu và dấu câu CJK (U+3000–U+303F), Định dạng tương thích và tương thích, Phụ lục biểu tượng tương thích, v.v.

Unicode dự đoán rằng việc tích hợp các chữ tượng hình sẽ không có hồi kết tuyệt đối và xem xét các cơ chế như chuỗi mô tả tượng hình để biểu diễn các ký hiệu chưa được mã hóa bằng cách phân tích chúng thành các thành phần hiện có (với lưu ý: không có sự phân tích chuẩn tắc hoặc đảm bảo trong các thao tác như tìm kiếm hoặc sắp xếp).

Các dạng mã hóa: UTF-8, UTF-16 và UTF-32

Unicode định nghĩa các dạng chuyển đổi (UTF) để chuyển đổi các điểm mã thành các đơn vị lưu trữ, nhờ đó phần mềm có thể xử lý văn bản một cách hiệu quả theo ngữ cảnh của nó.

UTF-8 là định dạng mã hóa hướng byte, có độ dài thay đổi, tương thích với ASCII trong phạm vi U+0000–U+007F trong một byte duy nhất. Tiêu chuẩn hiện hành sử dụng từ 1 đến 4 byte cho mỗi ký tự; một số tài liệu cũ hơn đề cập đến 1–6, nhưng trong Unicode hiện đại thì là 1–4. Đây là định dạng chiếm ưu thế trên web.

UTF-16 sử dụng các đơn vị 16 bit.

(một hoặc hai đơn vị mã cho mỗi ký tự) : hầu hết các ký tự BMP nằm gọn trong một đơn vị; các ký tự bổ sung sử dụng các cặp thay thế trong phạm vi U+D800–U+DFFF.

UTF-32 có độ dài cố định: 4 byte mỗi ký tự, đơn giản nhưng tốn nhiều không gian lưu trữ; hữu ích khi việc truy cập trực tiếp vào từng ký tự là quan trọng và bộ nhớ không phải là vấn đề.

Cách phân phối bit trong UTF-8

Định dạng UTF-8 phân phối các bit mã điểm thành các chuỗi từ 1 đến 4 byte với các tiêu đề dễ nhận biết, giúp tránh sự mơ hồ và tạo điều kiện thuận lợi cho việc phát hiện ranh giới ký tự.

Phạm vi Unicode Mẫu bit Bytes
U+0000..U+007F 0xxxxxxxx 1
U+0080..U+07FF 110yyyyy 10xxxxxx 2
U+0800..U+FFFF 1110zzzz 10yyyyyy 10xxxxxx 3
U+010000..U+10FFFF 11110uuu 10uuuzzzz 10yyyyyy 10xxxxxx 4

Một ưu điểm quan trọng của UTF-8 là nó tránh được các vấn đề về thứ tự byte (endianness) và cho phép xử lý luồng văn bản hiệu quả cao, ngoài ra còn tương thích ngược với ASCII.

Các lược đồ mã hóa, độ endian và BOM

Ngoài các định dạng UTF, Unicode mô tả các lược đồ tuần tự hóa giải quyết cách thức truyền tải byte giữa các hệ thống có thứ tự byte khác nhau và cách các khía cạnh như thứ tự byte được báo hiệu.

  • UTF-8: tính chất endian không áp dụng. Nó có thể được mang theo Dấu đơn hàng Byte (BOM) như một gợi ý, mặc dù theo mặc định, nó không bắt buộc hoặc không được khuyến nghị.
  • UTF-16: Các biến thể BE/LE (big/little-endian) và BOM tùy chọn (nếu thiếu và không được xác định bởi giao thức, thì big-endian sẽ được coi là).
  • UTF-32: Các biến thể BE/LE có quy tắc tương tự; BOM được phép sử dụng làm dấu hiệu đặt hàng.
  Làm thế nào để học bảo mật máy tính

Ngoài ra còn có các biến thể cụ thể như UTF-16BE/UTF-16LE và UTF-32BE/UTF-32LE (theo quy ước không có BOM), và các mã hóa tương thích lịch sử khác như UTF-7 hoặc UTF-EBCDIC, bên cạnh GB18030 (tương đương với UTF-8 của Trung Quốc, hỗ trợ cả chữ Hán giản thể và truyền thống).

Chuẩn hóa, thành phần và tương đương

Nhiều ký tự có thể được biểu diễn dưới dạng tổ hợp sẵn hoặc chuỗi các ký tự cơ bản + dấu kết hợp . Ví dụ điển hình từ tài liệu sửa đổi: ký tự tổ hợp sẵn 'Ä' là U+00C4, trong khi dạng phân tách là 'A' (U+0041) + dấu chấm đôi (U+0308). Chữ 'ỗ' trong tiếng Việt có thể được biểu diễn là 'o' (U+006F) + dấu mũ (U+0302) + dấu ngã (U+0303).

Unicode định nghĩa các dạng chuẩn hóa và hai loại tương đương : chuẩn tắc (cùng nội dung cốt lõi) và tương thích (các dạng có thể trông giống nhau nhưng có sự khác biệt về ngữ nghĩa). Việc chuẩn hóa đảm bảo so sánh chuỗi đáng tin cậy và giảm sự trùng lặp.

Thuật toán hai chiều và các ký tự đặc biệt

Đối với các hệ chữ viết từ phải sang trái, chẳng hạn như tiếng Ả Rập hoặc tiếng Do Thái, Unicode tích hợp một thuật toán hai chiều được tiêu chuẩn hóa và liên tục phát triển (Bidi) (ví dụ: các bản sửa đổi trong phiên bản 6.3), để các văn bản hỗn hợp có chữ Latinh và tiếng Ả Rập được hiển thị theo đúng thứ tự trực quan.

Các loại mã điểm cần biết tùy thuộc vào tài liệu nhận được: ký tự đồ họa (chữ cái, dấu hiệu, ký hiệu), định dạng (các ký tự ẩn ảnh hưởng đến quá trình xử lý: U+2028 ngắt dòng, U+2029 ngắt đoạn, U+00A0 khoảng trắng cứng), mã điều khiển kế thừa để tương thích (phạm vi U+0000–U+001F, U+007F, U+0080–U+009F), sử dụng riêng, vị trí dành riêng, ký tự thay thế (U+D800–U+DFFF cho UTF-16) và các ký tự không phải ký tự (U+FFFE, U+FFFF trong mỗi mặt phẳng).

Unicode, ISO/IEC 10646 và các tiêu chuẩn khác (ASCII, ANSI, trang mã)

Unicode được đồng bộ hóa với ISO/IEC 10646 (UCS) và giữ nguyên các ánh xạ tới các tiêu chuẩn trước đó (ASCII, ISO 8859-1, ANSI Z39.64, JIS X 0208, KS X 1001, GB 2312, GB 18030, HKSCS, CNS 11643, v.v.), ngoài ra còn dành riêng không gian cho mục đích sử dụng cá nhân của các nhà sản xuất.

ASCII so với Unicode : ASCII là bộ ký tự 7 bit với 128 ký tự , đủ dùng cho tiếng Anh cơ bản, nhưng không đủ cho các ngôn ngữ có dấu phụ, chữ tượng hình hoặc biểu tượng cảm xúc . Unicode bao gồm hơn 140.000 ký tự và vẫn đang tiếp tục phát triển, với mã hóa 8/16/32 bit theo định dạng UTF-12.

ANSI và bảng mã : 'ANSI' thường đề cập đến các bảng mã 8 bit của Windows, vốn bị giới hạn và không tương thích lẫn nhau. Một máy tính chạy hệ điều hành OEM-Latin II khi mở văn bản bằng hệ thống IBM EBCDIC-Cyrillic sẽ thấy các ký tự không chính xác. Unicode khắc phục vấn đề này bằng một bộ ký tự duy nhất và khả năng chuyển đổi không mất dữ liệu giữa các dạng ký tự của chính nó.

Triển khai trên hệ thống (Windows, Solaris) và chuyển đổi

Windows sử dụng UTF-16 cho các API hiện đại của mình và cung cấp các tính năng như MultiByteToWideChar và WideCharToMultiByte để chuyển đổi giữa Unicode và các bảng mã (SBCS/DBCS/MBCS). Nếu bạn buộc phải chuyển đổi sang bảng mã, có thể xảy ra mất dữ liệu nếu bảng mã đó không thể biểu diễn tất cả các ký tự.

Các ứng dụng mới trên Windows nên sử dụng UTF-16 bên trong và để việc chuyển đổi ở các bên ngoài (I/O, giao thức), nhằm giảm thiểu lỗi dữ liệu. Mặc dù vậy, Windows vẫn duy trì khả năng tương thích với các bảng mã khi không thể tránh khỏi.

Theo tài liệu được sửa đổi, Oracle Solaris 11 hỗ trợ Unicode 6.0 và ISO/IEC 10646:2011 ở cấp độ hệ thống, sử dụng UTF-8 làm định dạng mặc định trong các bộ tham số, giúp tránh các vấn đề về thứ tự byte và bảo toàn ASCII một cách minh bạch.

Unicode trong thực tế: Web, tài liệu và lập trình

Trên web, việc phục vụ và lưu trữ nội dung ở định dạng UTF-8 là phổ biến . Trong HTML, hãy khai báo '<meta charset="UTF-8">' để đảm bảo khả năng tương thích, và sử dụng các ký tự số thập lục phân khi cần thiết (ví dụ: ký hiệu euro '&#x20AC;').

  Tổng đài điện thoại: chức năng và thương hiệu chính

Trong Word, bạn có thể dễ dàng chèn các ký hiệu Unicode bằng cách đặt con trỏ, vào Chèn > Ký hiệu, hoặc bằng cách nhập mã và nhấn Alt+X; thao tác này sẽ chuyển đổi giá trị thành ký tự tương ứng theo quy trình chuẩn. Xem thêm danh sách mã Alt để chèn ký hiệu từ bàn phím.

Trong ngôn ngữ lập trình : trong Python 3, chuỗi ký tự đã là Unicode; trong Java và C#, bạn có thể sử dụng ký tự thoát '\uXXXX'; trong HTML, '&#xXXXX;'. Điều quan trọng là việc chỉnh sửa, biên dịch và truyền tải phải sử dụng cùng một mã hóa để tránh lỗi.

Việc sao chép và dán các ký hiệu hoạt động nếu toàn bộ chuỗi ký tự đều ở định dạng Unicode . Nếu một phần của chuỗi sử dụng mã hóa khác, dấu chấm hỏi, hình vuông hoặc các ký hiệu lạ khác có thể xuất hiện.

Cơ sở dữ liệu ký tự (UCD), thuộc tính và danh mục

Cơ sở dữ liệu ký tự Unicode (UCD) công bố, đối với mỗi điểm mã, tên, loại, hệ chữ viết, thuộc tính chữ hoa/chữ thường, hướng và các đặc điểm khác . Thông tin này rất quan trọng để các công cụ hiển thị và xử lý văn bản hoạt động chính xác.

Nhờ những đặc tính này , các thành phần và thuật toán khác nhau (như sắp xếp, phân đoạn từ hoặc chuyển đổi chữ hoa/chữ thường) có thể hoạt động nhất quán với cùng một dữ liệu.

Các phiên bản và phần mở rộng của tiêu chuẩn: điểm nổi bật

Unicode phát triển qua từng phiên bản , tích hợp thêm các hệ chữ viết, ký hiệu và biểu tượng cảm xúc mới. Các cột mốc quan trọng bao gồm phiên bản 1.0 năm 1991 với 7.161 ký tự, và các bản mở rộng tiếp theo đã bổ sung hàng nghìn ký hiệu, chữ tượng hình, biểu tượng cảm xúc và hệ chữ viết mới.

Ví dụ, vào năm 2022 , phiên bản 15.0 đã bổ sung thêm 4.192 chữ Hán, Nhật, Hàn và các ký tự khác, nâng tổng số ký tự lên khoảng 149.186.

Công cụ để khám phá bảng Unicode

Có những công cụ miễn phí để tìm kiếm và phân tích ký tự : Unibook Character Browser, SYMBL và Branah.com cho phép bạn truy vấn các thuộc tính, tên và khối ký tự, giúp các nhà phát triển và người tạo nội dung dễ dàng tìm thấy thông tin họ cần một cách nhanh chóng.

Các trường hợp sử dụng: biểu mẫu địa chỉ, quốc tế hóa và kinh doanh

Việc cho phép người dùng nhập địa chỉ bằng ngôn ngữ và chữ viết của riêng họ giúp giảm thiểu lỗi và cải thiện trải nghiệm người dùng. Ngoài ra, khả năng tương thích Unicode ngăn ngừa các vấn đề chuyển đổi giữa các hệ thống khác nhau, duy trì tính toàn vẹn của văn bản trong toàn bộ chuỗi kỹ thuật số.

Vì lý do này, Unicode là yếu tố cơ bản đảm bảo tính nhất quán của văn bản trong toàn bộ cơ sở hạ tầng kỹ thuật số , từ các biểu mẫu web đến hệ thống cơ sở dữ liệu và tài liệu in, bất kể bạn sử dụng ký tự 'ñ', tiếng Ả Rập, tiếng Trung Quốc hay biểu tượng cảm xúc trong cùng một câu.

Số nhị phân
Bài viết liên quan:
Số nhị phân: Ngôn ngữ bí mật của máy tính