Pregunta

¿Cómo puedo convertir wchar_t cadena de mayúsculas a minúsculas en C++?

La cadena contiene una mezcla de Japonés, Chino, alemán y griego caracteres.

Pensé acerca del uso de towlower...

http://msdn.microsoft.com/en-us/library/8h19t214%28VS.80%29.aspx

..pero la documentación dice que:

El caso de la conversión de towlower es específica de la configuración regional.Sólo los caracteres relevantes para la configuración regional actual se cambian en caso de que.

Editar:Tal vez debería describir lo que estoy haciendo.Puedo recibir una Unicode consulta de búsqueda de un usuario.Es originalmente en la codificación UTF-8, pero me estoy convirtiendo a un widechar (puedo estar equivocado en la redacción).Mi depurador (VS2008) muestra correctamente el Japonés, alemán, etc caracteres en la variable de "inspección rápida".Necesito ir a través de otro conjunto de datos en Unicode y encontrar coincidencias de la cadena de búsqueda.Mientras que esto no es ningún problema para mí cuando la búsqueda es sensible a mayúsculas y minúsculas, es más problemático para hacerlo en mayúsculas o en minúsculas.Mi (tal vez ingenuo) enfoque para resolver el problema sería convertir todos los datos de entrada y datos de salida a minúsculas y luego comparar.

¿Fue útil?

Solución

Si su cadena contiene todos esos caracteres, el conjunto de códigos debe estar basado en Unicode. Si se implementa correctamente, Unicode (Capítulo 4 ' Propiedades de caracteres ') define las propiedades de los caracteres, incluido si el carácter es mayúscula y la asignación de minúscula, y así sucesivamente.

Dado ese preámbulo, la función towlower() de <wctype.h> es la herramienta correcta para usar. Si no funciona, tiene un problema de QoI (Calidad de implementación) para discutir con su proveedor. Si encuentra que el proveedor no responde, busque bibliotecas alternativas. En este caso, puede considerar ICU (Componentes internacionales para Unicode).

Otros consejos

Usted tiene un desagradable problema en la mano.Un Japonés de la configuración regional no va a ayudar a la conversión de alemán y viceversa.Hay lenguas que no tienen el concepto de captalization cualquiera (toupper y amigos sería un no-op aquí, supongo).Así, se puede romper la cadena en los trozos individuales de palabras de la misma lengua?Si usted puede, a continuación, usted puede convertir las piezas y una cadena de ellos.

Este MODO de respuesta se muestra cómo trabajar con las facetas trabajar con varias configuraciones regionales.Si esto es en Windows, usted puede considerar el uso de funciones de API de win32, si usted puede trabajar con C++.NET (managed C++), puede utilizar la char.ToLower y string.ToLower funciones, que son compatible con Unicode.

Eche un vistazo a _wcslwr_l en <wchar.h> ( MSDN ).

Debería poder ejecutar la función en la entrada para cada una de las configuraciones regionales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top