繁体   English   中英

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

[英]Why are unpack and show defined differently in Data.Text (and behave differently for non-ASCII characters?)

unpackshow是将Text转换为String两种方法。 但是,对于非ASCII字符,它们的行为和定义不同:

Prelude Data.Text> putStrLn $ unpack $ pack "你好我的朋友"
你好我的朋友
Prelude Data.Text> putStrLn $ show $ pack "你好我的朋友"
"\20320\22909\25105\30340\26379\21451"

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

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

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

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

如果你想要漂亮的非转义普通字符串输出作为GHCi echo,你可以使用新的自定义漂亮打印机功能 我已经在这里写了一些东西。

暂无
暂无

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

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