gpt4 book ai didi

parsing - 在 Haskell 中派生读取(和显示)时避免反斜杠编码 utf8 字符

转载 作者:行者123 更新时间:2023-12-02 22:30:21 25 4
gpt4 key购买 nike

在派生 Read 实例时,我无法将 utf8 字符解析为 Text。例如,当我在 ghci...

中运行以下命令时
> import Data.Text
> data Message = Message Text deriving (Read, Show)
> read ("Message \"→\"") :: Message
Message "\8594"

我可以做些什么来将我的文本保存在 Message utf-8 编码中吗? IE。结果应该是……

Message "→"

(附:我已经收到序列化消息作为Text,但目前需要unpackString才能调用阅读。我很想避免这种情况...)

编辑:抱歉,答案正确地指出它是 show 而不是 read 转换为 "\8594" - 有没有办法在没有反斜杠编码的情况下显示并再次转换回Text

最佳答案

据我所知,Text 使用的内部编码(即 actually UTF-16 )是一致的,不会直接公开。如果您需要 UTF-8,您可以根据需要对 Text 值进行解码/编码。同样,谈论 String 的编码也没有意义,因为那只是 Char 的列表,其中每个 Char 都是一个unicode 代码点。

很可能,它只是 TextShow 实例在此处以不同方式显示内容。

此外,请记住(按照标准库中的一致约定)readshow 应表现为(反)序列化函数,具有“序列化” "被解释为 Haskell 表达式的格式,描述了一个等同于被(反)序列化的值的值。因此,使用 ASCII 文本的斜线编码通常是首选,因为它得到广泛支持且明确无误。如果您想用实际代码点显示 Text 值,show 不是您想要的。


我不完全清楚你想用 Text 做什么——直接使用 show 正是你要避免的。如果您想在终端窗口中显示将指定编码的文本,并且您想要在 Data.Text.IO 中定义的内容。如果出于任何其他原因需要转换为特定编码,Data.Text.Encoding 将为您提供编码的 ByteString(强调“字节”,而不是“字符串” --a ByteString 是原始字节序列,而不是字符串)。

如果您只是想将 Text 转换为 String 然后再转换回 Text... 斜线编码有什么问题? show 并不是真正用于 pretty-print 输出以供用户阅读,尽管许多人最初的期望并非如此。

关于parsing - 在 Haskell 中派生读取(和显示)时避免反斜杠编码 utf8 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12377243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com