Để được hỗ trợ UTF-8, có lớp Glib::ustring. Nó được mô hình hóa sau std::string
nhưng là nhận thức utf-8, ví dụ: khi bạn quét chuỗi bằng trình lặp. Nó cũng có một số hạn chế, ví dụ: trình vòng lặp luôn là const
, khi thay thế một ký tự có thể thay đổi độ dài của chuỗi và do đó nó có thể làm mất hiệu lực các trình lặp khác.
ustring
không tự động chuyển đổi các mã hóa khác thành utf-8, Glib
thư viện có nhiều loại conversion functions cho việc này. Bạn có thể xác nhận xem chuỗi có phải là utf-8 hợp lệ hay không.
Và cũng có thể, ustring
và std::string
là hoán đổi cho nhau, tức là ustring
có một nhà điều hành đúc để std :: string để bạn có thể vượt qua một ustring
như một tham số nơi một std::string
dự kiến, và ngược lại tất nhiên, như ustring
thể được xây dựng từ std::string
.
Hmm Tôi đã không nhận thấy rằng trong tiêu chuẩn mới. Rất thú vị. Một sự xấu hổ lớn mà tôi không thể sử dụng nó trên các trình biên dịch thiếu hỗ trợ C++ 0x (chẳng hạn như trình biên dịch iPhone). Nó thực sự gây sốc cho tôi rằng những lớp này không tồn tại ... – Goz
Thật thú vị, mặc dù, có vẻ như GCC> 4.4 và VS2010 đều hỗ trợ nó. Đó là rực rỡ. Trên các nền tảng chính bao gồm các cửa sổ, Linux và nền tảng di động Android.Clang cũng nói rằng "nhiều" ví dụ làm việc ... – Goz
@Goz Không phải mọi thứ đều tốt như bạn nghĩ. VS2010 hỗ trợ các chuỗi unicode, nhưng nó không hỗ trợ các chuỗi ký tự unicode. u "Hello" là chuỗi UTF-16 và U "Hello" là chữ UTF-32. Visual studio không nhận ra chúng. Và cũng như tôi đã nói gcc không hỗ trợ đầu vào, dòng đầu ra nào được nêu ra. – UmmaGumma