¿Hay una forma portátil de convertir una cuerda UTF-8 en C en mayúscula? Si no, ¿cuál es la forma de Linux para hacerlo?¿Cómo convierto una cuerda UTF-8 en mayúscula?
Respuesta
La forma portátil de hacerlo sería utilizar una biblioteca consciente de Unicode como ICU. Parece que u_strToUpper
podría ser la función que estás buscando.
La manera canónica de hacerlo es con wchar_t, si tiene una cadena de caracteres anchos y usa towlower/towupper/towctrans con sus caracteres anchos (lo cual funcionará si su configuración regional está configurada correctamente). Así que debes tomar tu cadena UTF-8, convertirla en una cadena de caracteres anchos, y luego usar estas funciones que toman wchar_t's y luego convertir de nuevo.
Este es un PITA gigante, por lo que probablemente sea mejor utilizar una biblioteca Unicode de código abierto compatible como ICU.
No, esto es incorrecto. Es imposible hacer que funcione con texto en alemán (por ejemplo), porque la versión en mayúscula de ß es SS, que son dos caracteres. Esto está lejos del único ejemplo en el que se rompe, pero es el más común. –
Es cierto, pero es la única versión que está cerca de ser correcta usando librerías posix-standard (más yo culpo al estándar Unicode que inicialmente especificaba una mapeo de casos 1: 1 entre caracteres). –
@JacobB La carcasa completa ofrece resultados mucho mejores que la carcasa simple simple y antigua, y lo sabemos desde hace muchos años. Es por eso que los lenguajes como Java y Perl ofrecen una carcasa completa en sus funciones de mapeo de cassettes. No trabaje codepoint por punto de código; simplemente no funciona. Necesitas toda la cadena. – tchrist
glib tiene g_utf8_strup()
.
Estoy seguro de que esta es la respuesta correcta, pero por alguna razón, obtengo 'Sin entrada manual para g_utf8_strup' al ejecutar' man g_utf8_strup', esto a pesar de que ejecuta 'nm /opt/local/lib/libglib-2.0.a | grep g_utf8_strup' demuestra que está allí. Eso es realmente superstupido. FTFSF. – tchrist
@tchrist: estúpido es relativo; una página de manual para cada función glib resultaría en 100 + MB de páginas de manual –
@ IgnacioVazquez-Abrams: viendo cómo pesa la versión ** HTML sin comprimir a 75 MB, no confío demasiado en su estimación. – ninjalj
- 1. Cómo convertir una cadena a UTF8?
- 2. ¿Cómo convierto una cadena en caso de título en android?
- 3. Python - ¿Cómo cortar una cuerda en Python?
- 4. Cómo romper una cuerda en las líneas
- 5. ¿Cómo convertir una cuerda en flotante?
- 6. ¿Regex con una cuerda o no regex con una cuerda?
- 7. Cómo truncar una cadena UTF8 en PHP?
- 8. Expresión regular, cuerda dividida por la letra mayúscula, pero ignoran TLA
- 9. OCaml - ¿Cómo convierto int en una cadena?
- 10. ¿Cómo puedo reemplazar una cuerda por rango?
- 11. jQuery each() con una cuerda
- 12. ¿Cuerda partida en Lua?
- 13. ¿Cómo verificar el juego de caracteres de la cuerda?
- 14. strcat concat a char en una cuerda?
- 15. ¿Cómo convierto una lista en una tupla en Haskell?
- 16. ¿Cómo convierto una cadena en una representación en minúsculas?
- 17. ¿Cómo convierto una cadena en una lista en Io?
- 18. ¿Cómo convierto una enumeración en una lista en C#?
- 19. utf-8 en mayúscula?
- 20. Cómo lanzar un char * a una cuerda en D?
- 21. ¿Cómo recortar los espacios en blanco finales de una cuerda?
- 22. ¿Cómo se empareja el patrón con una variable en mayúscula?
- 23. ¿cómo termina la cuerda en java?
- 24. strftime hacer la primera letra mayúscula (mayúscula) en PHP
- 25. Almacenar una cadena como UTF8 en C#
- 26. ¿Cómo convierto una cadena de caracteres en una cadena wchar_t?
- 27. ¿Cómo convierto una URL relativa en una URL completa?
- 28. ¿Cómo convierto una cadena como "Rojo" en una System.Windows.Media.Color?
- 29. ¿Cómo convierto una cadena ISO 8601 en una Delphi TDate?
- 30. ¿Cómo convierto una matriz de bytes en una cadena?
Como nota, la ICU requerirá que convierta UTF-8 -> UTF-16 -> mayúscula UTF-16 -> mayúscula UTF-8. (En realidad, no hay otras bibliotecas que hagan esto). –