unicode - Usando Haskell para producir un ByteString codificado en UTF-8
Me estoy volviendo loco intentando simplemente enviar datos codificados en UTF-8 a la consola.
ByteString
lograr esto usando 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 no está funcionando:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO ()
main = putStr $ pack "čušpajž日本語"
Imprime uapaj~ ,
, ugh.
Me gustaría obtener una respuesta para el último GHC 6.12.1, 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
, simplemente hago un putStr =<< getLine
.) Pero valores empaquetados desde el archivo .hs, como en el ejemplo anterior, se niegan a dar salida correctamente ... ¿Debo estar haciendo algo mal?
bytestrings
cadenas de bytes son cadenas de bytes. Cuando Data.ByteString.Char8
, se truncarán a 8 bits, como se describe en la documentación de Data.ByteString.Char8
. Tendrá que convertirlos explícitamente a utf8 - a través del paquete utf8-string
en Hackage, que contiene soporte para cadenas de bytes.
Sin embargo, a partir de 2011, debe usar el paquete de text
, para una salida rápida y empaquetada de Unicode. GHC trunca la salida de caracteres Unicode
Tu ejemplo se vuelve mucho más simple:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import qualified Data.Text.IO as T
main = T.putStrLn "čušpajž日本語"
Al igual que:
$ runhaskell A.hs
čušpajž日本語
utf8-string
admite utf8-string
bytes.
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)
main :: IO ()
main = putStr $ fromString "čušpajž日本語"