Bước tới nội dung

Hướng dẫn sử dụng ký tự đặc biệt Unicode/Chương 1: Giới thiệu về Unicode

Tủ sách mở Wikibooks

Chương 1: Giới thiệu về Unicode

[sửa]

Unicode là tiêu chuẩn mã hóa ký tự quốc tế, cho phép máy tính xử lý và hiển thị văn bản của hầu hết các hệ thống chữ viết trên thế giới. Chương này giới thiệu lịch sử, cấu trúc và nguyên lý hoạt động của Unicode.

1.1 Lịch sử phát triển Unicode

[sửa]

1.1.1 Vấn đề trước khi có Unicode

[sửa]

Trước khi Unicode ra đời, mỗi ngôn ngữ hoặc vùng lãnh thổ sử dụng bảng mã riêng:

  • ASCII (1963): Chỉ hỗ trợ 128 ký tự, đủ cho tiếng Anh cơ bản
  • ISO 8859: Bộ tiêu chuẩn gồm nhiều phần cho các ngôn ngữ châu Âu
  • TCVN 3, VNI, VISCII: Các bảng mã tiếng Việt không tương thích với nhau
  • Shift-JIS, EUC-JP: Bảng mã cho tiếng Nhật
  • GB2312, Big5: Bảng mã cho tiếng Trung Quốc

Sự đa dạng này gây ra nhiều vấn đề:

  • Văn bản hiển thị sai khi mở trên hệ thống khác
  • Không thể trộn nhiều ngôn ngữ trong cùng một tài liệu
  • Khó khăn trong trao đổi dữ liệu quốc tế

1.1.2 Sự ra đời của Unicode

[sửa]

Unicode được phát triển từ cuối thập niên 1980 bởi hai nhóm độc lập:

  • XeroxApple: Bắt đầu dự án Unicode năm 1987
  • ISO: Phát triển tiêu chuẩn ISO 10646

Năm 1991, hai dự án hợp nhất, tạo ra tiêu chuẩn thống nhất. Unicode Consortium được thành lập để duy trì và phát triển tiêu chuẩn này.

1.1.3 Các mốc phát triển quan trọng

[sửa]
Phiên bản Năm Số ký tự Điểm nổi bật
1.0 1991 7.161 Phiên bản đầu tiên
2.0 1996 38.885 Thêm chữ Hán mở rộng
3.0 1999 49.194 Thêm nhiều hệ chữ cổ
4.0 2003 96.382 Thêm ký tự toán học, âm nhạc
6.0 2010 109.449 Thêm Emoji đầu tiên
13.0 2020 143.859 Mở rộng Emoji, thêm hệ chữ mới
15.0 2022 149.186 Phiên bản mới nhất tính đến 2024

1.2 Cấu trúc và nguyên lý hoạt động

[sửa]

1.2.1 Khái niệm Code Point

[sửa]

Mỗi ký tự trong Unicode được gán một số nguyên duy nhất gọi là code point (điểm mã). Code point được biểu diễn theo định dạng:

U+XXXX hoặc U+XXXXX

Trong đó X là chữ số thập lục phân (0-9, A-F).

Ví dụ:

  • U+0041 = A (chữ A in hoa Latinh)
  • U+00E0 = à (chữ a có dấu huyền)
  • U+4E2D = 中 (chữ Hán "trung")
  • U+2665 = ♥ (biểu tượng trái tim)
  • U+1F600 = 😀 (emoji mặt cười)

1.2.2 Các mặt phẳng Unicode (Planes)

[sửa]

Không gian mã Unicode được chia thành 17 mặt phẳng (planes), mỗi mặt phẳng chứa 65.536 code point (216):

Mặt phẳng Phạm vi Tên gọi Nội dung chính
0 U+0000 – U+FFFF Basic Multilingual Plane (BMP) Hầu hết ký tự thông dụng
1 U+10000 – U+1FFFF Supplementary Multilingual Plane (SMP) Ký tự cổ, emoji, ký hiệu
2 U+20000 – U+2FFFF Supplementary Ideographic Plane (SIP) Chữ Hán mở rộng
3–13 U+30000 – U+DFFFF (Chưa sử dụng) Dành cho tương lai
14 U+E0000 – U+EFFFF Supplementary Special-purpose Plane (SSP) Ký tự điều khiển đặc biệt
15–16 U+F0000 – U+10FFFF Private Use Areas (PUA) Vùng sử dụng riêng

1.2.3 Các khối ký tự (Blocks)

[sửa]

Trong mỗi mặt phẳng, ký tự được tổ chức thành các khối (blocks) theo nhóm chức năng hoặc ngôn ngữ. Một số khối quan trọng:

Trong BMP (Mặt phẳng 0):

  • Basic Latin (U+0000–U+007F): Ký tự ASCII
  • Latin-1 Supplement (U+0080–U+00FF): Latinh mở rộng Tây Âu
  • Latin Extended-A (U+0100–U+017F): Latinh mở rộng A
  • General Punctuation (U+2000–U+206F): Dấu câu chung
  • Currency Symbols (U+20A0–U+20CF): Ký hiệu tiền tệ
  • Letterlike Symbols (U+2100–U+214F): Ký hiệu dạng chữ
  • Arrows (U+2190–U+21FF): Mũi tên
  • Mathematical Operators (U+2200–U+22FF): Toán tử
  • Miscellaneous Symbols (U+2600–U+26FF): Biểu tượng hỗn hợp
  • Dingbats (U+2700–U+27BF): Ký tự trang trí
  • CJK Unified Ideographs (U+4E00–U+9FFF): Chữ Hán thống nhất

Trong SMP (Mặt phẳng 1):

  • Emoticons (U+1F600–U+1F64F): Biểu tượng cảm xúc
  • Miscellaneous Symbols and Pictographs (U+1F300–U+1F5FF): Biểu tượng đồ họa
  • Transport and Map Symbols (U+1F680–U+1F6FF): Ký hiệu giao thông

1.3 Phân biệt Unicode với các khái niệm liên quan

[sửa]

1.3.1 Unicode vs. UTF-8

[sửa]

Đây là sự nhầm lẫn phổ biến:

  • Unicodetiêu chuẩn định nghĩa tập hợp ký tự và code point
  • UTF-8phương thức mã hóa (encoding) để lưu trữ code point Unicode dưới dạng byte

Tương tự như: Unicode là "từ điển" liệt kê tất cả ký tự, còn UTF-8 là "cách viết" các ký tự đó thành dãy số máy tính hiểu được.

1.3.2 Character vs. Glyph

[sửa]
  • Character (ký tự): Đơn vị trừu tượng có ý nghĩa, được gán code point
  • Glyph (hình chữ): Hình dạng cụ thể khi hiển thị ký tự

Một character có thể có nhiều glyph tùy thuộc vào font chữ. Ví dụ, chữ "a" có thể hiển thị khác nhau trong font Arial, Times New Roman, hay các font viết tay.

1.3.3 Grapheme Cluster

[sửa]

Grapheme cluster (cụm tự vị) là đơn vị mà người dùng nhận thức là "một ký tự". Một grapheme cluster có thể gồm nhiều code point.

Ví dụ:

  • Chữ "ề" trong tiếng Việt có thể biểu diễn bằng:
    • Một code point: U+1EC1 (dạng precomposed)
    • Ba code point: U+0065 (e) + U+0302 (dấu mũ) + U+0300 (dấu huyền)
  • Emoji cờ Việt Nam 🇻🇳 gồm hai code point: U+1F1FB + U+1F1F3

1.4 Tầm quan trọng của Unicode

[sửa]

1.4.1 Trong công nghệ thông tin

[sửa]
  • Web: HTML5 mặc định sử dụng UTF-8
  • Lập trình: Hầu hết ngôn ngữ hiện đại hỗ trợ Unicode (Python, JavaScript, Java, C#)
  • Cơ sở dữ liệu: MySQL, PostgreSQL, MongoDB đều hỗ trợ Unicode
  • Hệ điều hành: Windows, macOS, Linux đều sử dụng Unicode nội bộ

1.4.2 Trong đời sống

[sửa]
  • Giao tiếp đa ngôn ngữ trên Internet
  • Sử dụng emoji trong tin nhắn
  • Tạo nội dung sáng tạo với ký tự đặc biệt
  • Bảo tồn các hệ chữ viết cổ và ít phổ biến

Câu hỏi ôn tập

[sửa]
  1. Unicode là gì? Tại sao cần có Unicode?
  2. Code point là gì? Cho ví dụ về cách biểu diễn code point.
  3. Unicode có bao nhiêu mặt phẳng? Mặt phẳng nào chứa nhiều ký tự thông dụng nhất?
  4. Phân biệt Unicode và UTF-8.
  5. Giải thích khái niệm grapheme cluster với ví dụ tiếng Việt.

Tham khảo

[sửa]