我想要简单地将UTF-8编码的数据输出到控制台。
我已成功使用String
完成此操作,但现在我想对ByteString
执行相同的操作。有一个很好的快速方法吗?
这是我到目前为止所做的,而且它不起作用:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO ()
main = putStr $ pack "čušpajž日本語"
打印出uapaj~�,�
,呃。
我想获得最新GHC 6.12.1的答案,尽管我也希望听到以前版本的答案。
谢谢!
更新:简单地读取和输出相同的UTF-8编码的文本行似乎正常工作。 (使用Data.ByteString.Char8
,我只做一个putStr =<< getLine
。)但是.hs文件中的打包值,如上例所示,拒绝正确输出...我一定做错了什么? / p>
答案 0 :(得分:26)
utf8-string
支持bytestrings。
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)
main :: IO ()
main = putStr $ fromString "čušpajž日本語"
答案 1 :(得分:21)
bytestrings
是字节串。当它们输出时,它们将被截断为8位,如Data.ByteString.Char8
的文档中所述。你需要显式地将它们转换为utf8 - 通过Hackage上的utf8-string
包,它包含对字节串的支持。
但是,从2011年开始,您应该使用text
包,以获得快速,打包的unicode输出。 GHC truncating Unicode character output
你的例子变得简单得多:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import qualified Data.Text.IO as T
main = T.putStrLn "čušpajž日本語"
像这样:
$ runhaskell A.hs
čušpajž日本語
答案 2 :(得分:-2)