使用的Haskell以输出UTF-8编码的字节串
-
21-09-2019 - |
题
我要出去我心里想简单地输出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ž日本語
不隶属于 StackOverflow