GNU không có thư viện chuỗi Unicode, được gọi là libunistring, nhưng nó không xử lý bất cứ điều gì gần như cũng như của ICU.
Ví dụ: thư viện GNU thậm chí không cung cấp cho bạn quyền truy cập vào đối chiếu, đây là cơ sở cho tất cả so sánh chuỗi. Ngược lại, ICU làm. Một điều khác mà ICU cho rằng GNU không xuất hiện là Unicode regexes. Đối với điều đó, bạn có thể muốn sử dụng Phil Hazel’s excellent PCRE library for C, có thể được biên dịch với sự hỗ trợ UTF-8.
Tuy nhiên, có thể thư viện GNU là đủ cho những gì bạn cần. Tôi không thích API của nó nhiều. Rất bừa bộn. Nếu bạn thích lập trình C, bạn có thể thử các Go programming language, trong đó có hỗ trợ Unicode tuyệt vời. Đó là một ngôn ngữ mới, nhưng nhỏ và sạch sẽ và thú vị để sử dụng. Mặt khác, các ngôn ngữ thông dịch chính - Perl, Python và Ruby - tất cả đều có sự hỗ trợ khác nhau đối với Unicode tốt hơn bạn từng nhận được trong C. Trong số đó, hỗ trợ Unicode của Perl là phát triển nhất và mạnh mẽ.
Hãy nhớ rằng: không đủ để hỗ trợ thêm ký tự. Không có các quy tắc đi kèm với chúng, bạn không có Unicode. Tối đa, bạn có thể có ISO 10646: một tiết mục nhân vật lớn nhưng không có quy tắc. Câu thần chú của tôi là “Unicode không chỉ là nhiều nhân vật hơn; có nhiều ký tự hơn cộng với toàn bộ quy tắc để xử lý chúng. ”
Để biết thời lượng, xem ví dụ: http://stackoverflow.com/q/5117393/440558 –
Xin lưu ý rằng ví dụ: strlen() hoạt động hoàn toàn tốt trên dữ liệu được mã hóa utf-8, nó cung cấp cho bạn độ dài của chuỗi uft-8. Nó không cung cấp cho bạn số ký tự unicode trong chuỗi đó. – nos
một số liên kết khác từ stackoverflow http://stackoverflow.com/questions/1031645/how-to-detect-utf-8-in-plain-c, http://stackoverflow.com/questions/4607413/c-library- chuyển đổi-unicode-code-point-to-utf8/4609989 và thành đoạn mã tôi đã viết cách đây vài tuần https://bitbucket.org/cggaertner/libtcu/raw/5ea138154ba5/utf8z.h – Christoph