Unicode Basics: What''s Character Set, Character Encoding, UTF-8?
Tạm thời dừng các chủ đề về công nghệ. Nay mình sẽ đi dịch bài viết về Character encoding . Chả là đợt dự án gần đây bọn mình có export dữ liệu trong database ra file *.csv với encoding là Shift-JIS nên tiện thể tìm hiểu về encoding là gì và mình sẽ dịch chia sẻ luôn tới mọi người. Chúng ta cùng ...
Tạm thời dừng các chủ đề về công nghệ. Nay mình sẽ đi dịch bài viết về Character encoding. Chả là đợt dự án gần đây bọn mình có export dữ liệu trong database ra file *.csv với encoding là Shift-JIS nên tiện thể tìm hiểu về encoding là gì và mình sẽ dịch chia sẻ luôn tới mọi người. Chúng ta cùng đi tìm hiểu nhé.
Bộ ký tự (character set) là gì?
Bộ ký tự (character set) là tập hợp các ký tự cố định. Ví dụ: Trong bảng chữ cái của tiếng Anh thì các ký tự từ "A" đến "Z" và "a" đến "z" có thể là một bộ ký tự với tổng cộng là 52 ký tự (bao gồm 26 ký tự chữ hoa và 26 ký tự chữ thường).
ASCII (American Standard Code for Information Interchange) là một trong những bộ ký tự đơn giản nhất được tiêu chuẩn hóa, nó được bắt đầu từ những năm 1960 và gần như là bộ ký tự được sử dụng duy nhất ở Mỹ cho đến những năm 1990.
ASCII chứa 128 ký hiệu. Trong đó bao gồm tất cả các ký hiệu (chữ cái, chữ số và các dấu chấm câu) mà bạn có thể nhìn thấy trên bàn phím thông thường được bán ở Mỹ. Và ASCII được thiết kế cho những ngôn ngữ chỉ sử dụng những chữ cái trong bảng chữ cái tiếng Anh.
- ASCII không chứa một số ký tự của Châu Âu như: è é å ñ ü.
- ASCII không chứa các ký hiệu như: ™ © ♥ • † ∑ « » →
- ASCII không thể sử dụng cho các ký tự của Trung Quốc, bảng chữ cái Ả Rập, bảng chữ cái tiếng Nga, ...
Bạn có thể xem danh sách đầy đủ của các ký tự ASCII: tại đây
Mã hóa ký tự là gì (character encoding)
Tất cả các tập tin (file) đều phải đi qua công đoạn mã hóa/giải mã để được lưu trữ đúng cách dưới dạng file hoặc khi hiển thị. Máy tính của chúng ta cần phải có một cách để dịch bộ ký tự của ngôn ngữ chúng ta sử dụng sang dạng ngôn ngữ của hệ thống là các số 0 và 1. Quá trình chuyển đổi này được gọi là Mã hóa ký tự.
Chúng ta có rất nhiều hệ thống mã hóa. Các hệ thống mã hóa được sử dụng phổ biến nhất hiện nay là:
- ASCII cho tiếng Anh. Được sử dụng rộng rãi trước những năm 2000.
- UTF-8 Unicode (được sử dụng mặc định trong Linux và hầu hết các dữ liệu trên Internet).
- UTF-16 Unicode (được sử dụng trong hệ thống tập tin bởi Microsoft Windows và Mac OSX, trong ngôn ngữ Java, ...)
- GB 18030 (được sử dụng ở Trung Quốc, chứa tất cả các ký tự Unicode)
- EUC (Extended Unix Code). Được sử dụng ở Nhật Bản
- Các series IEC 8859 (được sử dụng cho hầu hết các ngôn ngữ ở Châu Âu)
Bộ ký tự và Hệ thống mã hóa
Bộ ký tự (character set) và Hệ thống mã hóa (Encoding system) là các khái niệm khác nhau nhưng thường bị nhầm lẫn với nhau.
- Bộ ký tự (Character set): Là một bộ các ký tự đã được tiêu chuẩn hóa
- Hệ thống mã hóa (Encoding system): Là một tiêu chuẩn cho một cách thức mã hóa một chuỗi ký tự (của một bộ ký tự đã cho trước) thành chuỗi ngôn ngữ máy 0 và 1.
Trong những ngày đầu của máy tính thì hai khái niệm này không được phân biệt rõ ràng và chúng chỉ được gọi là một bộ ký tự hoặc hệ thống mã hóa. Dưới đây là một ví dụ cho sự nhầm lần này:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
Trong cú pháp có chứa từ "charset", nhưng nó thực sự lại là về mã hóa (encoding) chứ không phải bộ ký tự (charset). Bạn có thể xem thêm tại HTML: Character Sets and Encoding.
Một tiêu chuẩn của mã hóa là sự định nghĩa của một bộ ký tự. Vì nó cần phải xác định những ký nó được thiết kế ra để xử lý.
Bộ ký tự và hệ thống mã hóa của Unicode
Unicode là một tiêu chuẩn được tạo bởi Unicode Consortium vào năm 1991. Và nó chủ yếu định nghĩa cho hai thứ:
- Là một bộ ký tự (bao gồm các ký tự cần thiết cho tất cả các ngôn ngữ trên thế giới)
- Là một số hệ thống mã hóa (phổ biến nhất là UTF-8, UTF-16)
Bộ ký tự Unicode
Bộ ký tự Unicode bao gồm tất cả các ký tự viết bằng ngôn ngữ của con người. Nó bao gồm hàng chục ngàn ký tự của Trung Quốc, các ký hiệu toán học cũng như các ký tự đã chết (không được sử dụng nữa) như các chữ tượng hình Ai Cập và các biểu tượng cảm xúc (hay còn được gọi là "emoji" - xem thêm Unicode Emoji