25 unicode io haskell ghc bytestring
我试图简单地将UTF-8编码的数据输出到控制台.
我已经设法完成了这个String,但现在我想做同样的事情ByteString.有一个很好的快速方法吗?
这是我到目前为止所做的,它不起作用:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO ()
main = putStr $ pack "?ušpajž???"
Run Code Online (Sandbox Code Playgroud)
打印出来uapaj~?,?,呃.
我想要获得最新的GHC 6.12.1的答案,尽管我也希望听到以前版本的答案.
谢谢!
更新:简单地读取和输出相同的UTF-8编码的文本行似乎正常工作.(使用Data.ByteString.Char8,我只是做一个putStr =<< getLine.)但是.hs文件中的打包值,如上例所示,拒绝正确输出...我一定做错了什么?
Wei*_* Hu 26
utf8-string 支持字节串.
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)
main :: IO ()
main = putStr $ fromString "?ušpajž???"
Run Code Online (Sandbox Code Playgroud)
Don*_*art 21
bytestrings是字节串.当它们输出时,它们将被截断为8位,如文档中所述Data.ByteString.Char8.你需要显式地将它们转换为utf8 - 通过utf8-stringHackage 上的包,它包含对字节串的支持.
但是,从2011年开始,您应该使用该text软件包,以获得快速,打包的unicode输出.GHC截断Unicode字符输出
你的例子变得简单得多:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import qualified Data.Text.IO as T
main = T.putStrLn "?ušpajž???"
Run Code Online (Sandbox Code Playgroud)
像这样:
$ runhaskell A.hs
?ušpajž???
Run Code Online (Sandbox Code Playgroud)