Điều nổi tiếng là utf-8 hoạt động tốt nhất để lưu trữ tệp và truyền tải mạng. Nhưng mọi người tranh luận liệu utf-16/32 có tốt hơn để xử lý hay không. Một đối số chính là utf-16 vẫn là độ dài thay đổi và thậm chí utf-32 vẫn không phải là một điểm mã cho mỗi ký tự, vậy chúng tốt hơn utf-8 như thế nào? Ý kiến của tôi là utf-16 là một sự thỏa hiệp rất tốt.
Đầu tiên, các ký tự ở bên cạnh BMP cần mã hai điểm trong utf-16 là các mã cực kỳ hiếm khi được sử dụng. Các nhân vật Trung Quốc (cũng là một số nhân vật châu Á khác) trong phạm vi đó về cơ bản là những người chết. Những người bình thường sẽ không sử dụng chúng, ngoại trừ các chuyên gia sử dụng chúng để số hóa sách cổ. Vì vậy, utf-32 sẽ là một sự lãng phí hầu hết thời gian. Đừng lo lắng quá nhiều về những nhân vật đó, vì chúng sẽ không làm cho phần mềm của bạn trông xấu nếu bạn không xử lý chúng đúng cách, miễn là phần mềm của bạn không dành cho những người dùng đặc biệt đó.
Thứ hai, thông thường chúng ta cần phân bổ bộ nhớ chuỗi có liên quan đến số ký tự. ví dụ. cột chuỗi cơ sở dữ liệu cho 10 ký tự (giả sử chúng tôi lưu trữ chuỗi unicode ở dạng chuẩn hóa), sẽ là 20 byte cho utf-16. Trong hầu hết các trường hợp, nó sẽ hoạt động giống như vậy, ngoại trừ trường hợp cực đoan, nó sẽ chỉ có 5-8 ký tự. Nhưng đối với utf-8, độ dài byte chung của một ký tự là 1-3 đối với các ngôn ngữ phương Tây và 3-5 cho các ngôn ngữ Châu Á. Có nghĩa là chúng ta cần 10-50 byte ngay cả đối với các trường hợp thông thường. Nhiều dữ liệu hơn, xử lý nhiều hơn.
Đối với giao thức hiện tại không hỗ trợ UTF-8, đó là lý do chính đáng để không sử dụng UTF-8 :) Cá nhân tôi chỉ muốn hỗ trợ mã hóa UTF-8 vì nó cho phép ký tự unicode trong khi cho phép cuộc sống của tôi xoay quanh Ký tự ASCII-space (mở nội dung UTF-16 trong một trình soạn thảo "câm" làm cho tôi chảy máu). –
@pst: B ả n h ệ i h ệ i? – dan04