¿Cuál es la mejor práctica del procesamiento Unicode en C ++?
107
is_alpha
menos que esa sea la definición que desea.string
si te importa la corrección, siempre usa tu biblioteca Unicode para esto.
string
como datos binarios.Si no le importa la compatibilidad con versiones anteriores de los estándares C ++, el estándar C ++ 11 actual tiene soporte Unicode integrado: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
Por lo tanto, la mejor práctica para el procesamiento Unicode en C ++ sería utilizar las instalaciones integradas para ello. Sin embargo, eso no siempre es posible con bases de código más antiguas, ya que el estándar es tan nuevo en la actualidad.
EDITAR: Para aclarar, C ++ 11 es compatible con Unicode, ya que ahora tiene soporte para literales Unicode y cadenas Unicode. Sin embargo, la biblioteca estándar solo tiene soporte limitado para el procesamiento y la conversión Unicode. Para sus necesidades actuales, esto puede ser suficiente. Sin embargo, si necesita hacer una gran cantidad de trabajo pesado en este momento, es posible que deba usar algo como la UCI para un procesamiento más profundo. Actualmente hay algunas propuestas en proceso para incluir un soporte más sólido para la conversión de texto entre diferentes codificaciones. Mi conjetura (y esperanza) es que esto será parte del próximo informe técnico .
fuente
Nuestra empresa (y otras) utilizan la biblioteca de código abierto Internation Components for Unicode (ICU) desarrollada originalmente por Taligent.
Maneja cadenas, configuraciones regionales, conversiones, fecha / hora, colación, transformaciones, etc. Alabama.
Comience con la guía del usuario de la UCI
fuente
Aquí hay una lista de verificación para la programación de Windows:
fuente
Mire la comparación de cadenas sin distinción entre mayúsculas y minúsculas en C ++
Esa pregunta tiene un enlace a la documentación de Microsoft en Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
Si busca en el lado de navegación de la izquierda en MSDN junto a ese artículo, debería encontrar mucha información relacionada con las funciones Unicode. Es parte de un capítulo sobre "Codificación de caracteres" ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
Tiene las siguientes subsecciones:
fuente
Aunque esta puede no ser la mejor práctica para todos, ¡puede escribir sus propias rutinas C ++ UNICODE si lo desea!
Acabo de terminar de hacerlo durante un fin de semana. Aprendí mucho, aunque no garantizo que esté 100% libre de errores, hice muchas pruebas y parece funcionar correctamente.
Mi código está bajo la nueva licencia BSD y se puede encontrar aquí:
http://code.google.com/p/netwidecc/downloads/list
Se llama WSUCONV y viene con un programa main () de muestra que convierte entre UTF-8, UTF-16 y ASCII estándar. Si tira el código principal, tiene una buena biblioteca para leer / escribir UNICODE.
fuente
Como se ha dicho anteriormente, una biblioteca es la mejor opción cuando se utiliza un sistema grande. Sin embargo, algunas veces desea manejar las cosas usted mismo (tal vez porque la biblioteca usaría muchos recursos como en un microcontrolador). En este caso, desea una biblioteca simple de la que pueda copiar las partes para las cosas que realmente necesita.
El código de ejemplo de Willow Schlanger parece bueno (consulte su respuesta para obtener más detalles).
También encontré otro que tiene un código más pequeño, pero que carece de verificación completa de errores y solo maneja UTF-8, pero fue más sencillo extraer partes.
Aquí hay una lista de las bibliotecas integradas que parecen decentes.
Bibliotecas integradas
fuente
Utilice los componentes internacionales de IBM para Unicode
fuente
Eche un vistazo a las recomendaciones de UTF-8 Everywhere
fuente