2009-02-04 8 views
24

Tôi cần một thư viện Unicode tốt cho C++. Tôi cần:Có STL và UTF-8 thân thiện với C++ Wrapper cho ICU hay thư viện Unicode mạnh mẽ khác

  1. Biến đổi theo cách nhạy cảm với Unicode. Ví dụ, sắp xếp tất cả các chuỗi theo cách không phân biệt chữ hoa chữ thường và lấy ký tự đầu tiên của chúng cho chỉ mục. Chuyển đổi các chuỗi Unicode khác nhau thành chữ hoa và chữ thường. Tách văn bản ở vị trí hợp lý - các từ cũng sẽ hoạt động tốt cho tiếng Trung và tiếng Nhật.
  2. Số định dạng, ngày tháng theo cách nhạy cảm miền địa phương (nên là chủ đề an toàn).
  3. Hỗ trợ minh bạch UTF-8 (biểu diễn nội bộ chính).

Theo như tôi biết thư viện tốt nhất là ICU. Tuy nhiên, tôi không thể tìm thấy tài liệu API thân thiện với nhà phát triển thông thường với các ví dụ. Cũng như xa như tôi thấy, nó không phải là quá thân thiện với hiện đại C + + thiết kế, làm việc với STL và như vậy. Như thế này:

std::string msg; 
unistring umsg.from_utf8(msg); 
unistring::word_iterator wi; 
for(wi=umsg.words().begin(),n=0;wi!=usmg.words().wi_end(),n<10;++wi,++n) 
    ; 
msg=umsg.substr(umsg.words().begin(),wi).to_utf8(); 
cout<<_("Five 10 words are ")<<msg; 

Có trình bao bọc ICU thân thiện với STL được phát hành theo giấy phép nguồn mở không? Ưu tiên là một giấy phép được phép như MIT hoặc Boost, nhưng những giấy phép khác, giống như LGPLv2 tương thích, cũng OK.

Có thư viện chất lượng cao khác tương tự như ICU không?

Nền tảng: Unix/POSIX, không cần hỗ trợ Windows.

Chỉnh sửa: tiếc là tôi chưa đăng nhập, vì vậy tôi không thể chấp nhận câu trả lời. Tôi đã tự mình đính kèm câu trả lời.

+6

Ooh, 1 cho câu hỏi này. Đó là khó hiểu rằng một thư viện lớn như ICU hoàn toàn không theo các thành ngữ C++ phổ biến. – jalf

Trả lời

1

Bộ công cụ GUI wxWidgets có một số lớp chuỗi khá tốt và hỗ trợ unicode. Bạn không cần phải xây dựng/sử dụng các lớp GUI nếu bạn không muốn. Xem here để biết chi tiết.

1

Điều này có phù hợp với hóa đơn không?

http://www.codeproject.com/KB/string/utf8cpp.aspx

+0

Dường như chỉ cung cấp một tập con nhỏ những gì được yêu cầu. Nó chỉ đơn giản cho phép xử lý chuỗi UTF-8, nhưng không hỗ trợ số toLower/toUpper/định dạng/... –

+0

Đúng - nó chỉ để xử lý chuỗi utf-8, nhưng nó có thể dễ dàng được kết hợp với thuật toán chuỗi tăng. Tất nhiên, ngay cả sau đó nó không thay thế ICU. –

21

Câu hỏi này được hỏi khá lâu trước đây một mình. Không có thư viện như vậy.

Vì vậy, tôi đã viết thư viện thân thiện với C++ Boost.Locale kết thúc tốt đẹp ICU.

Sửa Bây giờ một phần của Boost: xem Boost.Locale documentation

+0

Điều này thật tuyệt vời. Bạn đã thực hiện gửi lên Boost chưa? –

+0

Tôi đã bắt đầu một quy trình sơ bộ trong sơ sinh - trước khi nộp chính thức.Thực hiện theo danh sách gửi thư nâng cao – Artyom

+0

@Artyom: Vâng, tôi đang theo dõi danh sách gửi thư nâng cao. Tôi thực sự đánh giá cao nỗ lực của bạn. Tuy nhiên Boost.Locale là xa là một wrapper hoàn chỉnh cho ICU. Tôi đã quan tâm để làm một số chuyển đổi BiDi, và tôi không thể nhìn thấy nó trong Boost.Locale được nêu ra. Có kế hoạch/nên được thêm vào đó không? Tôi có thể giúp chứ? – ybungalobill