Pregunta

Me voy fuera de mi mente tratando de datos codificados en UTF-8 simplemente salida a la consola.

Me las he arreglado para lograr esto usando String, pero ahora me gustaría hacer lo mismo con ByteString. ¿Hay una manera agradable y rápido para 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ž日本語"

Se imprime uapaj~�,�, uf.

Me gustaría una respuesta para la nueva GHC 6.12.1 mejor, aunque me gustaría escuchar respuestas para las versiones anteriores también.

Gracias!

Actualización: La simple lectura y la salida de la misma línea con codificación UTF-8 del texto parece funcionar correctamente. (El uso de Data.ByteString.Char8, acabo de hacer un putStr =<< getLine.) Pero que está lleno de valores dentro del archivo .hs, como en el ejemplo anterior, se niegan a salir correctamente ... Debo estar haciendo algo mal?

¿Fue útil?

Solución

utf8-string soporta cadenas de bytes.

import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)

main :: IO ()
main = putStr $ fromString "čušpajž日本語"

Otros consejos

bytestrings son cadenas de bytes. Cuando están de salida, que serán truncados a 8 bits, ya que describe en la documentación de Data.ByteString.Char8. Tendrá que convertir explícitamente a utf8 -. A través del paquete de utf8-string en Hackage, que contiene soporte para cadenas de bytes


Sin embargo, a partir de 2011, se debe utilizar el paquete text, para, salida rápida Unicode lleno. GHC truncar caracteres Unicode de salida

Su ejemplo se convierte en 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ž日本語
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top