ICU (International Components for Unicode)

Thư viện quốc tế hóa Unicode cung cấp đối chiếu chuỗi, chuyển đổi, định dạng và xử lý đa ngôn ngữ.

ICU (International Components for Unicode) là thư viện quốc tế hóa (i18n) được phát triển và duy trì bởi Unicode Consortium. Có sẵn trong C/C++ (ICU4C) và Java (ICU4J), nó được áp dụng làm nền tảng xử lý đa ngôn ngữ cho hệ điều hành, trình duyệt và runtime ngôn ngữ lập trình. ICU hoạt động nội bộ trong phần mềm hàng ngày bao gồm Android, iOS, macOS, Windows, Chrome và Firefox.

ICU cung cấp nhiều khả năng. Đối chiếu chuỗi (sắp xếp theo locale) xử lý chính xác thứ tự bảng chữ cái khác nhau giữa các ngôn ngữ. Ví dụ, trong tiếng Thụy Điển "ö" đứng sau "z", trong khi tiếng Đức nó được coi là biến thể của "o". Định dạng ngày, số và tiền tệ chuyển đổi "2025/01/15" thành "January 15, 2025" trong tiếng Anh hoặc "15. Januar 2025" trong tiếng Đức. Sách thư viện quốc tế hóa Unicode bao gồm toàn bộ phạm vi của ICU.

Phát hiện ranh giới văn bản (BreakIterator) đặc biệt liên quan đến đếm ký tự. Nó xác định chính xác ranh giới từ, ranh giới câu và vị trí ngắt dòng theo quy tắc ngôn ngữ. Đối với các ngôn ngữ như tiếng Nhật và tiếng Trung không phân tách từ bằng khoảng trắng, cần phân tích dựa trên từ điển, và ICU xử lý điều này nội bộ. API Intl.Segmenter của JavaScript cung cấp khả năng phát hiện ranh giới văn bản của ICU cho web.

Node.js đã bao gồm bộ dữ liệu ICU đầy đủ theo mặc định từ v13, và API Intl sử dụng ICU nội bộ. Các phiên bản trước chỉ bao gồm dữ liệu ICU một phần, khiến một số locale hoạt động sai. Trình duyệt cũng dựa vào ICU làm nền tảng cho các API như Intl.Collator, Intl.DateTimeFormatIntl.NumberFormat.

Thuật toán đối chiếu của ICU (UCA: Unicode Collation Algorithm) xử lý thứ tự sắp xếp theo locale thông qua so sánh đa cấp. Cấp 1 so sánh ký tự cơ sở, Cấp 2 so sánh dấu trọng âm và Cấp 3 so sánh chữ hoa/thường. Cấu trúc này cho phép ứng dụng kiểm soát liệu "cafe" và "café" được coi là giống nhau hay khác nhau dựa trên yêu cầu. Sách quốc tế hóa phần mềm giải thích chi tiết thuật toán đối chiếu.

Đối với đếm ký tự, phân đoạn grapheme cluster của ICU đặc biệt quan trọng. Đếm chính xác "ký tự người dùng nhận thức" trong văn bản chứa chuỗi emoji gia đình (👨‍👩‍👧‍👦) hoặc ký tự kết hợp đòi hỏi thư viện xử lý văn bản tinh vi như ICU. Trong các tình huống đếm code point đơn giản hoặc đếm byte không tạo ra số ký tự chính xác, khả năng của ICU chứng tỏ giá trị vô cùng lớn.