Tôi rất vui khi thấy std::u16string
và std::u32string
trong C++ 11, nhưng tôi tự hỏi tại sao không có std::u8string
để xử lý trường hợp UTF-8. Tôi theo ấn tượng rằng std::string
là dành cho UTF-8, nhưng nó dường như không làm điều đó rất tốt. Ý tôi là, không phải std::string.length()
vẫn trả về kích thước của bộ đệm của chuỗi thay vì số ký tự trong chuỗi?std :: u16string, std :: u32string, std :: string, length(), size(), codepoints và ký tự
Vì vậy, phương pháp length()
của các chuỗi chuẩn được định nghĩa cho các lớp C++ 11 mới như thế nào? Họ có trả về kích thước của bộ đệm của chuỗi, số lượng điểm mã, hoặc số ký tự (giả sử cặp thay thế là 2 điểm mã, nhưng một ký tự. Vui lòng sửa tôi nếu tôi sai)?
Và còn khoảng size()
; không phải là nó bằng length()
? Xem http://en.cppreference.com/w/cpp/string/basic_string/length vì nguồn gốc của sự nhầm lẫn của tôi. Vì vậy, tôi đoán, câu hỏi cơ bản của tôi là làm thế nào người ta sử dụng std::string
, std::u16string
và std::u32string
và phân biệt đúng kích thước bộ đệm, số điểm mã và số ký tự không? Không. Nếu bạn sử dụng các trình vòng lặp tiêu chuẩn, bạn có đang lặp qua các byte, các điểm mã hoặc các ký tự không?
'std :: string' hoạt động tốt cho utf8 là' u16string' làm cho utf16: nó xử lý các phần tử của loại tương ứng và không xử lý các ký tự được biểu diễn bằng một chuỗi gồm nhiều phần tử. –
Truy cập tại đây: http://utf8everywhere.org/#myth.strlen –