首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本编码问题

文本编码问题
EN

Stack Overflow用户
提问于 2012-04-08 05:02:18
回答 2查看 299关注 0票数 3

我在文字编码方面有点麻烦。解析网站会给我一个Data.Text字符串

“Fran\195\167 195项目”,

我需要把它写到文件里。因此,我使用Data.Text.Lazy.Encoding.encodeUtf8将其转换为字节串。问题是,这会产生错误的输出:

“项目-Fran§ois Dubois”。

我在这里错过了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-08 10:05:17

如果你在你的Fran\195\167ois中得到了Data.Text,你已经有了一个UTF-8编码的François.

这是不方便的,因为Data.Text[.Lazy]应该是UTF-16编码文本,而这两个代码单元195和167被解释为unicode代码点195 resp。167,即“圣保罗”。“§”。如果您对文本进行UTF-8编码,这些将转换为字节序列c383 ([195,131]) resp c2a7 ([194,167]).

进入这种情况最有可能的方法是,您从网站获得的数据是UTF-8编码,但被解释为ISO-8859-1 (拉丁文1)编码(或另一个8位编码;8859-15也很普遍)。

处理这一问题的适当办法是完全避免可能不可能发生的情况,不幸的是。

如果你的数据来源正确地说明了它的编码--就像网站应该做的那样--找出编码并对数据进行相应的解释。如果一个不正确的编码被指出,你当然是运气不好,如果没有指定编码,你必须猜对了(现在的自然猜测是UTF-8,至少对于使用拉丁字母变体的语言来说是这样)。

如果不可能避免这种情况,最简单的解决方法是

  1. 在编码前用所需的序列替换出现的违规序列: encodeUtf8 $替换(pack“Fran\195\167 195”)(打包“Fran\231 195”)目录
  2. 假设其他内容都是ASCII或无意中的UTF-8,将Text代码单元解释为字节: Data.ByteString.Lazy.Char8.pack $ Data.Text.Lazy.unpack内容

前者效率更高,但如果有许多不同的错误编码(例如,由不同的重音字母引起),则会变得不方便。后者只在假设的情况下工作(Text中没有255个以上的代码单元),对于长文本来说效率很低。

票数 5
EN

Stack Overflow用户

发布于 2012-04-08 06:22:26

我不完全确定less是否能正确显示UTF-8编码的字符.GVim可以。您可以检查链接,以便了解如何在gVim中查看UTF-8数据。

关于能够将它传递给graphviz的另一个问题,我认为您需要在命令行上设置编码,正如图NonAscii常见问题中所解释的那样。

根据您正在解释的内容,我认为数据是如何持久化的没有问题。如果您正确地将编码传递给graphviz,我认为您的问题将得到解决。

P.S:创建一个答案,因为创建描述性链接更容易

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10060519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档