【发布时间】:2017-06-20 03:58:15
【问题描述】:
首先,如果术语“未转义的 unicode”和“utf8 整数”不正确,我深表歉意;当我在谈论编码时,我真的不知道我在说什么。
作为一个具体的例子,我想将字符串"\\u00b5ABC"转换为字符串"\181ABC"(\u00b5和\181对应µ)。 “字符串”是指String 或Text。
我知道如何通过曲折(也许是可笑)的方式来实现这一点:
import Data.Aeson (decode)
import Data.ByteString.Lazy (packChars)
import Data.Text (Text)
decode (packChars "\"\\u00b5ABC\"") :: Maybe Text
我敢打赌,还有更直接的方法……
编辑
根据@Alec 的评论,我提供了更多背景信息。在后台,有一个 Javascript 程序接收一个字符串,并将该字符串中的字符替换为它们的 unicode 表示 \\uxxxx当这个 unicode 表示介于 \u007F 和 \uFFFF 之间时。
在 Haskell 方面,我收到了这个新字符串,我想用它们对应的 utf8 整数表示来替换 \\uxxxx。
【问题讨论】:
-
我觉得您的问题有点未指定-您希望以
\...的形式打印哪些字符,以及您希望按字面意思打印哪些字符?除了这个问题,这是一个相当简单的问题。 -
老实说,您的代码似乎是最好的方法。在您给出的示例中,如果您打开 -XOverloadedStrings,则可以省略对
packChars的调用 -
@Alec 谢谢你的评论。
\u...字符来自 Javascript 程序。据我了解,它会生成从\u007F到\uFFFF的这些字符。具体来说,我“接收”一个包含文字字符和\u...字符的字符串,我想替换\u....字符。 -
@haoformayor 令人惊讶。这看起来像用锤子杀死一只苍蝇:)
标签: string haskell unicode utf-8