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.
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.DateTimeFormat và Intl.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.
Đố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.