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?

War es hilfreich?

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ž日本語
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top