Sé que ya hay varias preguntas sobre StackOverflow sobre std::string
frente a std::wstring
o similar, pero ninguna de ellas propuso una solución completa.¿Cuál es la forma óptima multiplataforma de manejar cadenas Unicode bajo C++?
Con el fin de obtener una buena respuesta que debería definir los requisitos:
- multiplataforma uso, debe funcionar en Windows, OS X y Linux
- mínimo esfuerzo para conversión a/desde la plataforma específica Cadenas de Unicode como
CFStringRef
,wchar_t *
,char*
como UTF-8 u otros tipos según lo requiera OS API. Observación: No necesito compatibilidad con la conversión de páginas de códigos porque espero usar solo funciones compatibles con Unicode en todos los sistemas operativos compatibles. - si requiere una biblioteca externa, esta debería ser de código abierto y bajo una licencia muy liberal como BSD pero no LGPL.
- ser capaz de utilizar un printf format sintaxis o similar.
- manera fácil de asignar/desasignar cadenas
- el rendimiento no es muy importante porque supongo que las cadenas Unicode se usan solo para la interfaz de usuario de la aplicación.
- algún ejemplo podría sería apreciada
apreciaría realmente sólo una solución propuesta por la respuesta, al hacer esto la gente puede votar por su alternativa preferida. Si tiene más de una alternativa, simplemente agregue otra respuesta.
Por favor, indique algo que funcionó bien para usted.
preguntas relacionadas:
- stdwstring-vs-stdstring
- does-c0x-support-stdwstring-conversion-to-from-utf-8-byte-sequence
- portable-wchart-in-c
¿Qué quiere decir por "tratar con cadenas Unicode"? ¿Simplemente quieres algo que pueda almacenar secuencias de puntos de código Unicode? ¿Algo que maneja correctamente la intercalación específica de la cultura? ¿Algo que sea capaz de manejar formas canónicas y no canónicas de una cuerda? – jalf
@jalf ¡Buen punto! Olvidé mencionar que excluí deliberadamente el uso avanzado de cadenas como la modificación de cadenas o los formularios de normalización, clasificación. Supuse que, por simplicidad, solo usaría estas cadenas para mostrar (pero podría necesitar usar formato de impresión o concatenaciones de cadenas, pero no más). Cualquier cosa más que esto requeriría ICU u otras librerías. – sorin