Tôi sẽ tưởng tượng lý do là nhanh, mảng giống như truy cập vào ký tự, nhưng một số ký tự sẽ không khớp với 16 bit, vì vậy nó sẽ không hoạt động ...
Vì vậy, nếu bạn phải xử lý các trường hợp đặc biệt, tại sao không sử dụng UTF-8?
Tôi sẽ tưởng tượng lý do là nhanh, mảng giống như truy cập vào ký tự, nhưng một số ký tự sẽ không khớp với 16 bit, vì vậy nó sẽ không hoạt động ...
Vì vậy, nếu bạn phải xử lý các trường hợp đặc biệt, tại sao không sử dụng UTF-8?
Câu trả lời:
Bởi vì nó từng là UCS-2 , là một bit 16 bit có độ dài cố định đẹp. Tất nhiên, 16bit hóa ra là không đủ. Họ trang bị thêm UTF-16 ở trên đầu.
Originally, Unicode was designed as a pure 16-bit encoding, aimed at representing all modern scripts. (Ancient scripts were to be represented with private-use characters.) Over time, and especially after the addition of over 14,500 composite characters for compatibility with legacy sets, it became clear that 16-bits were not sufficient for the user community. Out of this arose UTF-16.
Tại thời điểm phát hành Java UTF-16 chưa xuất hiện và UTF-8 không phải là một phần của tiêu chuẩn Unicode.
Đối với phần chính, vì mục đích của việc chứng minh tương lai đơn giản và đơn giản. Cho dù đó là một lý do sai lầm và cách đi sai về nó là một câu hỏi khác nhau.
Bạn có thể thấy một số lý do đằng sau một số quyết định thiết kế của họ trong tài liệu này về việc chuyển đổi năm 2004 sang Java 5 và UTF-16, giải thích một số thiếu sót: Các ký tự bổ sung trong Nền tảng Java và xem Tại sao hệ sinh thái Java sử dụng mã hóa khác nhau trong suốt ngăn xếp của họ? .
Để biết thêm chi tiết về những cạm bẫy của việc sử dụng UTF-16 và tại sao nói chung UTF-8 có thể là một lựa chọn tốt hơn, xem UTF-16 có nên được coi là có hại không? và bản tuyên ngôn UTF-8 ở mọi nơi .
string
một loại "đặc biệt" trong Java (giống như Array
là), thay vì String
là một lớp "thông thường" chứa tham chiếu đến một mảng "thông thường" chứa các ký tự thực tế. Tùy thuộc vào cách tạo chuỗi, UTF-8, UTF-16 hoặc thậm chí UTF-32 có thể là cách lưu trữ chuỗi hiệu quả nhất. Tôi không nghĩ có cách nào đặc biệt hiệu quả để một lớp "thông thường" String
xử lý nhiều định dạng, nhưng một loại "đặc biệt" có hỗ trợ JVM có thể.