Verwendung von Haskell zur Ausgabe eines UTF-8-encoded ByteString
-
21-09-2019 - |
Frage
Ich werde aus meinem Kopf auf die Konsole einfach Ausgabe UTF-8-kodierten Daten zu versuchen.
Ich habe es geschafft, dies mit String
zu erreichen, aber jetzt würde Ich mag das gleiche mit ByteString
zu tun. Gibt es eine schöne und schnelle Art und Weise, dies zu tun?
Das ist, was ich so weit gekommen, und es funktioniert nicht:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO ()
main = putStr $ pack "čušpajž日本語"
Es druckt uapaj~�,�
, igitt.
Ich möchte eine Antwort auf die neueste GHC 6.12.1 am besten, obwohl ich möchte Antworten als auch für frühere Versionen hören.
Danke!
Update: Einfach Lesen und Ausgeben die gleiche UTF-8-kodierten Textzeile scheint korrekt zu funktionieren. (Mit Data.ByteString.Char8
, das tue ich nur putStr =<< getLine
.) Aber gepackte Werte aus dem Inneren der .hs Datei, wie im obigen Beispiel Müll richtig ausgegeben ... Ich muss etwas falsch machen?
Lösung
utf8-string
unterstützt bytestrings.
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)
main :: IO ()
main = putStr $ fromString "čušpajž日本語"
Andere Tipps
bytestrings
sind Strings von Bytes. Wenn sie ausgegeben sind, werden sie auf 8 Bit abgeschnitten werden, wie es in der Dokumentation zu Data.ByteString.Char8
beschreibt. Sie werden sie brauchen, um explizit auf UTF-8 zu konvertieren -. Über das utf8-string
Paket auf Hackage, die Unterstützung für bytestrings enthält
Doch ab 2011, sollten Sie das text
Paket verwenden, für die schnellen, verpackt Unicode-Output. GHC Kürzen Unicode Zeichenausgabe
Ihr Beispiel wird viel einfacher:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import qualified Data.Text.IO as T
main = T.putStrLn "čušpajž日本語"
Wie so:
$ runhaskell A.hs
čušpajž日本語