我要出去我心里想简单地输出UTF-8编码的数据到控制台。

我已经成功地做到这一点使用String,但现在我想这样做与ByteString。是否有一个很好的和快速的方式做到这一点?

这就是我这么远,它不工作:

import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)

main :: IO ()
main = putStr $ pack "čušpajž日本語"

它打印出uapaj~�,�,啊。

我想为最新的6.12.1 GHC最好的答案,但我想听听以前版本的答案为好。

谢谢!

更新:简单地读出和输出文本的相同UTF-8编码的线似乎正常工作。 (使用Data.ByteString.Char8,我只是做了putStr =<< getLine。)但是密集的值从名为.hs文件中,如上面的例子,拒绝正确输出......我必须做一些错误的?

有帮助吗?

解决方案

utf8-string支持字节串。

import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)

main :: IO ()
main = putStr $ fromString "čušpajž日本語"

其他提示

bytestrings是字节的字符串。当他们输出,它们会被截断为8位,因为它Data.ByteString.Char8的文档中描述。你需要明确地将其转换为UTF8 - 通过utf8-string包上Hackage,其中包含字节串支持


但是,截至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ž日本語"

像这样:

$ runhaskell A.hs
čušpajž日本語
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top