Ich gehe mir durch den Kopf und versuche, einfach UTF-8-kodierte Daten an die Konsole auszugeben.Verwenden von Haskell, um einen UTF-8-codierten ByteString auszugeben
Ich habe es geschafft, dies mit String
zu erreichen, aber jetzt möchte ich das gleiche mit ByteString
tun. Gibt es einen schönen und schnellen Weg, dies zu tun? Diese
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 uapaj~�,�
ausdruckt, igitt.
Ich hätte gerne eine Antwort für die neueste GHC 6.12.1 am besten, obwohl ich auch Antworten auf frühere Versionen hören möchte.
Danke!
Update: Einfaches Lesen und Ausgeben derselben UTF-8-codierten Textzeile scheint korrekt zu funktionieren. (Mit Data.ByteString.Char8
, mache ich nur eine putStr =<< getLine
.) Aber gepackte Werte aus der .hs-Datei, wie im obigen Beispiel, weigern sich, richtig auszugeben ... Ich muss etwas falsch machen?
Auf welcher Plattform befinden Sie sich? Unicode auf UNIX-ähnlichen Plattformen funktioniert jetzt ziemlich gut; Die Windows-Unterstützung ist etwas zurückgeblieben. Weitere Informationen finden Sie in der Dokumentation zu System.IO: "(GHC-Hinweis: Unter Windows unterstützen wir derzeit keine Doppelbyte-Codierungen; wenn die Codepage der Konsole nicht unterstützt wird, ist localeEncoding latin1.)" – ephemient
64-Bit-Linux. Funktioniert 'System.IO' nicht nur mit' String'? –
Sie sollten 'BS.Char8' nicht verwenden, da in diesem Fall die 8-Bit-Codierung vorausgesetzt wird und Unicode-Zeichen mit mehreren Byte abgeschnitten werden. Verwenden Sie normale ByteStrings, es sei denn, Sie wissen absolut, dass 'BS.Char8' der richtige Datentyp ist (einschließlich der Tatsache, dass normale ByteStrings explizit nicht der richtige Typ für diesen Anwendungsfall sind). – David