haskell – 为什么在Data.Text中解压缩和显示的方式不同(对于非ASCII字符的行为不同?)

haskell – 为什么在Data.Text中解压缩和显示的方式不同(对于非ASCII字符的行为不同?),第1张

概述unpack和show是将Text转换为String的两种方法.但是,对于非ASCII字符,它们的行为和定义不同: Prelude Data.Text> putStrLn $unpack $pack "你好我的朋友"你好我的朋友Prelude Data.Text> putStrLn $show $pack "你好我的朋友""\20320\22909\25105\30340\26379\214 unpack和show是将Text转换为String的两种方法.但是,对于非ASCII字符,它们的行为和定义不同:

Prelude Data.Text> putStrLn $unpack $pack "你好我的朋友"你好我的朋友Prelude Data.Text> putStrLn $show $pack "你好我的朋友""320909105340379451"

有了show,我相信,返回一串代码点,而unpack显示实际的字符.我在编码时发现这是一个令人讨厌的问题,因为我定义了一个带有Show实例并希望传入Text的函数,并期望它将实际的非ASCII字符作为String返回.

这种行为的设计意图是什么?为什么show和unpack定义不同?

来源可以在http://hackage.haskell.org/packages/archive/text/0.11.1.5/doc/html/src/Data-Text.html找到.

@H_419_20@解决方法 这是关于Show的一般情况:它的目的是产生一种对象的预览,它可以兼作可移植的序列化,可以像Haskell代码那样读取.显然,你好我的朋友是无效的Haskell(除非你把它定义为变量,你实际上是 can!),所以它不能被接受作为show的输出.如果它产生“你好我的朋友”(事实上,我更喜欢这样)会很好,但如果你没有在你的所有工作链中使用完整的UTF-8,这可能会导致平台等问题,因此选择了更安全的ASCII扩展.

如果你想要很好的非转义普通字符串输出作为GHCi回声,你可以使用the new custom-pretty-printer feature.我已经写了一些关于here的东西.

总结

以上是内存溢出为你收集整理的haskell – 为什么在Data.Text中解压缩和显示的方式不同(对于非ASCII字符的行为不同?)全部内容,希望文章能够帮你解决haskell – 为什么在Data.Text中解压缩和显示的方式不同(对于非ASCII字符的行为不同?)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1042712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存