gpt4 book ai didi

unicode - GHC 截断 Unicode 字符输出

转载 作者:行者123 更新时间:2023-12-02 16:12:46 26 4
gpt4 key购买 nike

我无法让 GHCi 或 GHC 打印 unicode 代码点 221A(平方符号:√)。

我不认为这是我的 shell,因为我可以让 ruby​​ 来做它:

irb> puts "\u221A"

GHC/GHCi 是另一个问题:

ghci> putStrLn "\8730"

ghci> withFile "temp.out" WriteMode $ flip hPutStrLn "\8730"
ghci> readFile "temp.out"
"\SUB\n"

那么我做错了什么?

(GHC v6.l0.3)

最佳答案

GHC 对 unicode 的行为 changed in GHC 6.12.1使用 Unicode 字符串“做正确的事”。早期版本在 IO 上截断为 8 位字符(强制使用编码库)。

也就是说,'\8730'是0x221a,而'\SUB'是0x1a——高字节消失了。

这里是 GHC 7:

Prelude> print "√\n"
"\8730\n"
Prelude> putStr "√\n"

Prelude> putStr "\8730√\n"
√√

但是我用 GHC 6.8 得到了你的结果。像这样:

Prelude> writeFile "/tmp/x" "√\n"
Prelude> readFile "/tmp/x"
"\SUB\n"

因为 unicode 位被截断为 8 位。

GHC 7 + IO 按预期工作:

Prelude> writeFile "/tmp/x" "\8730√\n"
Prelude> readFile "/tmp/x"
"\8730\8730\n"
Prelude> s <- readFile "/tmp/x"
Prelude> putStr s
√√

您可以升级到 GHC 7(在 Haskell Platform 中)以获得完整的 Unicode 支持吗?如果这不可能,您可以使用编码库之一,例如 utf8-string

关于unicode - GHC 截断 Unicode 字符输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655544/

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