Para el tipo de datos Char, ¿cómo especifico que quiero utilizar el i turco en lugar del inglés i para las funciones toLower y ToUpper?Haskell, Char, Unicode y turco
Respuesta
texto y el paquete de texto-UCI
A partir de 2011, la mejor opción es utilizar el paquete text, y la función toLower
de the Text ICU package, que apoya Char
operaciones parametrizado por un local,
De this example:
import Data.Text (pack, unpack)
import Data.Text.ICU (LocaleName(Locale), toLower)
main = do
let trLocale = Locale "tr-TR"
upStr = "ÇIİĞÖŞÜ"
lowStr = unpack $ toLower trLocale $ pack upStr
putStrLn $ "toLower " ++ upStr ++ " gives " ++ lowStr
la ejecución de este:
> toLower ÇIİĞÖŞÜ gives çıiğöşü
mientras que este ejemplo se convierte entre String
, también puede dejar los datos en formato text
.
tal vez intente configurar su configuración regional? no estoy seguro
La configuración regional no tiene ningún impacto en la biblioteca 'Data.Char' predeterminada. – grddev
Sin embargo, la configuración regional afecta al paquete 'Data.Text.ICU'. –
La biblioteca Data.Char
en Haskell no depende de la configuración regional. Funciona para todos los caracteres Unicode, pero quizás no de la manera esperable. En the corresponding Unicode chart, puede ver las asignaciones de "puntos"/"sin punto".
toUpper 'i'
=>'I'
toUpper 'ı'
=>'I'
toLower 'I'
=>'i'
toLower 'İ'
=>'i'
Por lo tanto, es claro que ninguna de las dos transformadas son reversibles . Si desea un manejo reversible de caracteres turcos, parece que tiene que usar una biblioteca C o hacer su propia.
ACTUALIZACIÓN: ElHaskell 98 report hace esto muy claro, mientras que el Haskell 2010 report sólo dice que Char
corresponde a un carácter Unicode, y no define claramente como la semántica de toLower
y toUpper
.
'toLower 'I'' debería dar un' i' sin puntos. –
@Alexandre: documenté cómo funciona Haskell y qué dice la especificación Unicode (vinculada). Si quieres otro comportamiento, debes implementar el tuyo (como en la respuesta de jrockway). – grddev
una simple cuestión de programación:
import qualified Data.Char as Char
toLower 'I' = 'ı'
toLower x = Char.toLower x
Entonces
toLower <$> "I AM LOWERCASE" == "ı am lowercase"
¿Realmente me está diciendo que tengo que hackear cada biblioteca que llame a Char.toLower para apoyar la internacionalización? –
@Jonathan: Sí, porque la especificación Haskell solo dice que sigas el estándar Unicode, que proporciona las reglas que di más arriba. Por lo tanto, cualquier biblioteca que use 'Char.toLower' no está preparada para la internacionalización. – grddev
@Jonathan Allen: si no desea el comportamiento estándar de Unicode, entonces no, no puede usar bibliotecas que sigan el estándar Unicode. Es desafortunado, pero bastante claro. – Chuck
debes revisar this post, usando la biblioteca de texto.
- 1. Coincidencia de unicode char específico en haskell regexp
- 2. Unicode almacenado en C char
- 3. MySQL - carácter turco
- 4. Delphi 2009 + Unicode + tamaño de char
- 5. Cadena Unicode eliminar char de la cadena
- 6. Haskell Cómo convertir a Char Word8
- 7. Cadena Unicode y TStringStream
- 8. ¿La mejor manera de convertir entre [Char] y [Word8]?
- 9. Char o cadena -> Valor Unicode en Scala?
- 10. char a Unicode más que U + FFFF en java?
- 11. Obtener el valor Unicode de un char en VB
- 12. En haskell, ¿cómo puedo mayúsculo un carácter Unicode con respecto a la configuración regional actual
- 13. C++ UNICODE y STL
- 14. C - fundición int a char y anexar char a char
- 15. Diferencia entre char * y char [] en C
- 16. Asignación de memoria char * y char []
- 17. Diferencia entre char y char [1]
- 18. Sobrescribir el método de mostrar para Cadena/Char en Haskell
- 19. char! = (Char firmado), char! = (Char no firmado)
- 20. ¿Cuál es la actitud de Haskell hacia Unicode en XML?
- 21. DllImport y char *
- 22. Char * p, y scanf
- 23. Conversión de cadenas Unicode y viceversa
- 24. Regex y Unicode
- 25. GCC, Unicode y __FUNCTION__
- 26. wWinmain, Unicode y Mingw
- 27. Unicode- VARCHAR y NVARCHAR
- 28. Python: Unicode y ElementTree.parse
- 29. Haskell y cadena de longitud
- 30. Diferencia entre static const char * y const char *
Favorito. El turco es complicado debido a problemas sin punto. Es el mejor caso de prueba para tales funciones. –
Comprender las mónadas es un juego de niños en comparación con el manejo correcto de Unicode. –
@Alex: ¿Turco? Sin mencionar las mayúsculas y minúsculas alemanas ß -> SS y las minúsculas griegas dependientes del contexto Σ -> σ/ς. – kennytm