Sono felice di vedere lo std::u16string
e std::u32string
in C++ 11, ma mi chiedo perché non c'è std::u8string
per gestire il caso UTF-8. Ho l'impressione che lo std::string
sia destinato a UTF-8, ma non sembra farlo molto bene. Ciò che intendo è, non std::string.length()
restituisce ancora la dimensione del buffer della stringa anziché il numero di caratteri nella stringa?std :: u16string, std :: u32string, std :: string, length(), size(), codepoints e caratteri
Quindi, come è il metodo delle corde standard di length()
definiti per i nuovi C++ 11 classi? Restituiscono la dimensione del buffer della stringa, il numero di codepoints o il numero di caratteri (supponendo che una coppia surrogata sia 2 punti codice, ma un carattere. Per favore correggimi se ho torto)?
E che dire di size()
; non è uguale a length()
? Vedere http://en.cppreference.com/w/cpp/string/basic_string/length per la fonte della mia confusione.
Quindi, credo, la mia domanda fondamentale è come si fa uso std::string
, std::u16string
e std::u32string
e adeguatamente distinguere tra dimensione del buffer, il numero di codepoints, e il numero di caratteri? Se si utilizzano gli iteratori standard, si sta iterando su byte, codepoint o caratteri?
'std :: string' funziona anche per utf8 come' u16string' fa per utf16: gestisce gli elementi del tipo corrispondente e non tratta i caratteri rappresentati da una sequenza di più di un elemento. –
Vai qui: http://utf8everywhere.org/#myth.strlen –