¿Cuál es el mejor tipo, en C++, para almacenar cadenas UTF-8? Me gustaría evitar rodar mi propia clase si es posible.¿Mejor tipo para datos UTF-8?
Mi pensamiento original era std::string
- sin embargo, esto usa char
como el tipo subyacente. char
puede estar sin firmar o firmado; varía. En mi sistema, está firmado. Sin embargo, las unidades de código UTF-8 son sin signo octetos. Esto parece indicar que es el tipo equivocado.
Esto nos lleva a std::basic_string<unsigned char>
- que parece encajar en la factura: sin signo, de 8 bits (o más grande).
Sin embargo, la mayoría de las cosas parecen usar char
. glib, por ejemplo, usa char
. El uso de C++ ostream
char
.
¿Pensamientos?
El único problema real con el uso de std :: string es que algunos operadores que se espera que trabajen en caracteres en realidad podrían terminar lidiando con caracteres parciales ya que UTF-8 es una codificación multibyte. Por ejemplo, usar el operador [] se rompería para que los "caracteres" además de la longitud de la cuerda no sean accesibles directamente. (El tamaño está disponible, pero no la longitud). –
Solo necesita pensar que una cadena es una matriz de unidades de código en lugar de una matriz de caracteres. Entonces las únicas funciones miembro de 'cadena' que no funcionan son aquellas como 'find_one_of' que toma un conjunto de caracteres como argumento. – dan04
@Evan: la definición de "caracteres" y "longitud" es tan compleja en Unicode (debido a la combinación y ligaduras y demás), que nunca será accesible directamente. Es mejor no pretender que lo son. –