我有一个像"\3619\3657\3634\3609\3648\3592\3657\3648\3621\3657\3591"
这样的字符串,我想解码它。我试着搜索unicode库但没有成功。
答案 0 :(得分:9)
前奏> putStrLn“\ 3619 \ 3657 \ 3634 \ 3609 \ 3648 \ 3592 \ 3657 \ 3648 \ 3621 \ 3657 \ 3591”
ร้านเจ้เล้ง
请注意,您实际上没有字符串"\3619\3657\3634\3609\3648\3592\3657\3648\3621\3657\3591"
- 而是拥有UTF-32字符串ร้านเจ้เล้ง
,"\3619\3657..."
恰好是符合ASCII的字符。默认情况下,GHCi使用Show
实例来显示结果,这并没有显示出吐出可用作事物的Haskell代码的文字。它在unicode方面很保守。这就是为什么
前奏> “ร้านเจ้เล้ง”
“\ 3619 \ 3657 \ 3634 \ 3609 \ 3648 \ 3592 \ 3657 \ 3648 \ 3621 \ 3657 \ 3591”
另一方面,putStrLn
,putChar
,hPutStr
等函数只会将字符串本身转储为UTF-8而不是ASCII安全表示。
如果您实际上正在从文件或其他内容中读取转义字符串,则只需读取即可:
前奏> s< - getLine
“\ 3619 \ 3657 \ 3634 \ 3609 \ 3648 \ 3592 \ 3657 \ 3648 \ 3621 \ 3657 \ 3591”
前奏>小号
“\”\ 3619 \\ 3657 \\ 3634 \\ 3609 \\ 3648 \\ 3592 \\ 3657 \\ 3648 \\ 3621 \\ 3657 \\ 3591 \“”
- 请注意双转义,因为我正在显示一个包含字符串文字的字符串。
前奏> putStrLn $ read s
ร้านเจ้เล้ง