繁体   English   中英

Haskell中的ByteStrings,Text和编码

[英]ByteStrings, Text, and encoding in Haskell

我希望使用Data.Text的IO功能获取输入文本。 我的quandry与编码发现有关。 也就是说,如果我之前不知道文本的编码,那么在读取的文本的编码与系统区域设置不同的情况下, Data.Text中的IO如何Data.Text使用? Data.Text是否存在编码发现机制?

我知道我可能会得到一堆的反应是说“使用Data.ByteString ”,但没有Data.Text从使用越来越远的目的而创建Data.ByteString阅读的文字?

另外,如果我必须使用Data.ByteString ,有没有人知道当读取八位字节0x80到0x9f时会发生什么? 它们是否像其他输入那样按预期读入? 它们在ISO-8859-1中未定义,而Data.ByteString的IO似乎表明输入被视为源是ISO-8859-1。

您将要使用ByteString来读取字节,例如:

decodeUtf8' :: ByteString -> Either UnicodeException Text

Data.Text.Encoding实际解码原始数据并处理任何编码错误。 text没有用于猜测编码的预定义机制,但您可以尝试多次解码,或使用ICU的字符集检测工具。 不幸的是,该功能目前在text-icu不可用,因此您需要自己导入它。

如果您事先不知道编码,我认为使用Data.ByteString并以二进制模式读取是完全正确的事情。 您应该将输入数据精确地作为字节,包括八位字节0x80到0x9f。

Data.Text是用已知编码表示某种东西的正确方法,或者更确切地说是解码形式,但如果你不能在读取时进行解码,那么我认为在那时使用它是没有意义的。

如果您的代码稍后可以适当地学习或猜测编码,那么这是进行切换的正确时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM