Oma*_*man 5 haskell bytestring
Data.ByteString.hGetContents的文档说
与hGet一样,文件中的字符串表示形式假定为ISO-8859-1.
为什么它必须"假设"任何关于"文件中的字符串表示"的内容?数据不一定是字符串或编码文本.如果我想要处理编码文本,我会使用Data.Text或者Data.ByteString.Char8.我认为ByteString的重点是数据是作为8位字节的列表处理的,而不是文本字符.假设ISO-8859-1的影响是什么?
这是一个迂回的方式来说同样的事情 - 没有执行解码(因为编码是8位,不需要做任何事情),所以hGetContents
给你的字节在0x00 - 0xFF范围内:
$ cat utf-8.txt
ÇÈÄ
$ iconv -f iso8859-1 iso8859-1.txt
ÇÈÄ
$ ghci
> openFile "iso8859-1.txt" ReadMode >>= (\h -> fmap BS.unpack $ BS.hGetContents h)
[199,200,196,10]
> openFile "utf-8.txt" ReadMode >>= (\h -> fmap BS.unpack $ BS.hGetContents h)
[195,135,195,136,195,132,10]
Run Code Online (Sandbox Code Playgroud)