Estoy feliz de ver std::u16string
y std::u32string
en C++ 11, pero me pregunto por qué no hay std::u8string
para manejar el caso UTF-8. Tengo la impresión de que std::string
está destinado para UTF-8, pero parece que no lo hace muy bien. Lo que quiero decir es, ¿std::string.length()
aún no devuelve el tamaño del búfer de la cadena en lugar del número de caracteres en la cadena?std :: u16string, std :: u32string, std :: cadena, longitud(), tamaño(), puntos de código y caracteres
Entonces, ¿cómo se define el método length()
de las cadenas estándar para las nuevas clases de C++ 11? ¿Devuelven el tamaño del búfer de la cuerda, el número de puntos de código o el número de caracteres (suponiendo que un par suplente tenga 2 puntos de código, pero un carácter. Corrígeme si me equivoco)?
Y qué tal size()
; ¿No es igual a length()
? Ver http://en.cppreference.com/w/cpp/string/basic_string/length para la fuente de mi confusión.
lo tanto, supongo, mi pregunta fundamental es cómo lo hace un uso std::string
, std::u16string
y std::u32string
y distinguir correctamente entre el tamaño del búfer, el número de puntos de código, y el número de caracteres? Si usa los iteradores estándar, ¿itera sobre bytes, puntos de código o caracteres?
'std :: string' funciona igual para utf8 que' u16string' para utf16: maneja elementos del tipo correspondiente, y no trata con caracteres que están representados por una secuencia de más de un elemento. –
Vaya aquí: http://utf8everywhere.org/#myth.strlen –