Utilizzando Haskell per emettere un ByteString UTF-8-encoded
-
21-09-2019 - |
Domanda
Io vado fuori di testa cercando di dati UTF-8-encoded semplicemente uscita per la console.
Sono riuscito a ottenere questo risultato utilizzando String
, ma ora mi piacerebbe fare lo stesso con ByteString
. Esiste un modo piacevole e veloce per fare questo?
Questo è quello che ho finora, e non funziona:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO ()
main = putStr $ pack "čušpajž日本語"
esso stampa uapaj~�,�
, ugh.
Mi piacerebbe una risposta per il nuovo GHC 6.12.1 migliore, anche se mi piacerebbe sentire le risposte per le versioni precedenti pure.
Grazie!
Update: La semplice lettura e in uscita la stessa linea di UTF-8-encoded del testo sembra funzionare correttamente. (Utilizzando Data.ByteString.Char8
, ho solo fare un putStr =<< getLine
.) Ma ricco valori da dentro il file .hs, come nell'esempio di cui sopra, si rifiutano di uscita correttamente ... io devo fare qualcosa di sbagliato?
Soluzione
utf8-string
supporta stringhe di byte.
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)
main :: IO ()
main = putStr $ fromString "čušpajž日本語"
Altri suggerimenti
bytestrings
sono stringhe di byte. Quando sono uscita, saranno troncati a 8 bit, come si descrive nella documentazione per Data.ByteString.Char8
. Avrete bisogno di convertirli esplicitamente utf8 -. Tramite il pacchetto utf8-string
su Hackage, che contiene il supporto per stringhe di byte
Tuttavia, a partire dal 2011, si dovrebbe usare il pacchetto text
, per un veloce, uscita unicode al sacco. GHC troncando caratteri Unicode uscita
Il tuo esempio diventa molto più semplice:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import qualified Data.Text.IO as T
main = T.putStrLn "čušpajž日本語"
In questo modo:
$ runhaskell A.hs
čušpajž日本語