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?

È stato utile?

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ž日本語
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top