Non riesco a visualizzare semplicemente i dati con codifica UTF-8 nella console.Utilizzo di Haskell per l'output di un byte codificato in UTF-8
Sono riuscito a farlo usando String
, ma ora mi piacerebbe fare lo stesso con ByteString
. C'è un modo bello 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.
Vorrei una risposta per il GHC 6.12.1 più recente, anche se mi piacerebbe sentire le risposte anche per le versioni precedenti.
Grazie!
Aggiornamento: la semplice lettura e l'output della stessa riga di testo con codifica UTF-8 sembra funzionare correttamente. (Utilizzando Data.ByteString.Char8
, faccio solo un putStr =<< getLine
.) Ma i valori compressi dall'interno del file .hs, come nell'esempio precedente, rifiutano di produrre correttamente ... Devo fare qualcosa di sbagliato?
Quale piattaforma sei? Unicode su piattaforme UNIX-like funziona abbastanza bene ora; Il supporto di Windows è in ritardo. Vedere la documentazione di System.IO: "(nota GHC: su Windows, al momento non supportiamo le codifiche a doppio byte, se la code page della console non è supportata, allora localeEncoding sarà latin1.)" – ephemient
Linux a 64 bit. 'System.IO' non funziona solo con' String'? –
Non dovresti usare 'BS.Char8', perché si presuppone la codifica a 8 bit e tronca i caratteri Unicode multi-byte. Usa normale ByteStrings a meno che tu non sappia * assolutamente * che 'BS.Char8' è il tipo di dati corretto (che include il sapere perché il normale ByteStrings non è esplicitamente il tipo giusto per quel caso d'uso). – David