Me estoy volviendo loco intentando simplemente enviar datos codificados en UTF-8 a la consola.Usando Haskell para dar salida a una ByteString codificada en UTF-8
Lo he logrado con String
, pero ahora me gustaría hacer lo mismo con ByteString
. ¿Hay alguna manera buena y rápida de hacer esto?
Esto es lo que tengo hasta ahora, y que no está funcionando:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO()
main = putStr $ pack "čušpajž日本語"
imprime uapaj~�,�
, uf.
Me gustaría obtener una respuesta para el último GHC 6.12.1 mejor, aunque también me gustaría recibir respuestas para las versiones anteriores.
Gracias!
Actualización: Simplemente leer y generar la misma línea de texto codificada en UTF-8 parece funcionar correctamente. (Usando Data.ByteString.Char8
, acabo de hacer un putStr =<< getLine
). Pero los valores empaquetados desde dentro del archivo .hs, como en el ejemplo anterior, se niegan a dar salida correctamente ... ¿Debo estar haciendo algo mal?
¿En qué plataforma estás? Unicode en plataformas tipo UNIX funciona bastante bien ahora; El soporte de Windows se está retrasando un poco. Consulte la documentación de System.IO: "(Nota de GHC: en Windows, actualmente no admitimos codificaciones de doble byte, si la página de códigos de la consola no es compatible, entonces localeEncoding será latin1)" – ephemient
Linux de 64 bits. ¿'System.IO' no funciona solo con' String'? –
No debe usar 'BS.Char8', porque eso supone una codificación de 8 bits y trunca caracteres Unicode de varios bytes. Use ByteStrings normales a menos que * completamente * sepa * que 'BS.Char8' es el tipo de datos correcto (eso incluye saber por qué ByteStrings normales no son explícitamente del tipo correcto para ese caso de uso). – David