2010-09-08 16 views
5

Tengo una cadena que contiene caracteres UTF-8, y tengo un método que se supone que convierte cada carácter en mayúscula o minúscula, esto se hace fácilmente con caracteres que se superponen con ASCII, y obviamente algunos caracteres no se pueden convertir, por ejemplo cualquier caracter chino Sin embargo, existe una buena forma de detectar y convertir otros caracteres que pueden ser Upper/Lower, p. Ej. todos los personajes griegos? También tenga en cuenta que necesito poder hacer esto tanto en Windows como en Linux.Conversión de caracteres UTF-8 en mayúscula/minúscula C++

Gracias,

+0

Es importante obtener la terminología correcta aquí para obtener una respuesta útil. UTF-8 es una codificación de caracteres especificada en RFC 3629 (y en otros lugares); contiene algoritmos para mapear entre caracteres Unicode y secuencias de octetos que representan esos caracteres de forma portátil. Por favor, sea preciso con los tipos; aún mejor, muestre el código que incluye las declaraciones y los tipos. –

+1

Greg su comentario no tiene sentido para mí, lo siento, pero todavía no tengo ningún código Estoy tratando de averiguar cómo hacer algo, no tratando de depurar algo que no está funcionando correctamente, así que no tiene sentido para mí, también Sé que UTF-8 es una codificación, pero eso realmente no cambia lo que estoy tratando de lograr, que es desarrollar un medio por el cual pasar de "a" -> "A" o de "Ω" -> "ω" – NSA

+0

¿Cuál es el propósito? ¿Pretendes usarlo para comparar tales cadenas procesadas? Supongo que quieres usarlo para tal comparación. ¿Te das cuenta de que esto no hará que cosas como "ß" y "ss" sean equivalentes en alemán? – wilx

Respuesta

13

Tenga una mirada en ICU.

Tenga en cuenta que las funciones de minúscula a mayúscula dependen de la configuración regional. Piensa en la letra I turca (ascii) que obtiene "minúscula sin puntos i" y (ascii) i que obtiene "mayúscula I con un punto".

+0

Gracias por el consejo de Alexandre, sin embargo, no estoy autorizado para que esta aplicación vincule con libs de terceros. Así que necesito descubrir cómo hacer esto sin usar esa lib. – NSA

+0

Le sugiero que escriba su propia herramienta de mapeo de casos, consulte http://www.unicode.org/faq/casemap_charprop.html. Desde allí puede descargar todas las asignaciones de casos especiales. – tidwall

+2

C++ no tiene soporte unicode en absoluto. ICU es * el * camino a seguir. –

2

Suponiendo que tiene acceso a wctype.h, convierta su texto en una cadena de 2 bytes y utilice towupper(). Luego conviértalo nuevamente a UTF-8.

+1

o use la UCI como se menciona en Alexandre. – tidwall

+1

No maneja la sigma alemana ß y la terminal griega de esta manera. –

+0

@Alexandre C .: Si los caracteres como ese se convierten correctamente o no depende completamente de la configuración regional actual. – caf

Cuestiones relacionadas