ram*_*ion 3 unicode haskell ghc
我不能让GHCi或GHC打印unicode代码点221A(sqrt符号:√).
我不认为这是我的shell,因为我可以得到ruby:
irb> puts "\u221A"
?
Run Code Online (Sandbox Code Playgroud)
GHC/GHCi是另一个问题:
ghci> putStrLn "\8730"
ghci> withFile "temp.out" WriteMode $ flip hPutStrLn "\8730"
ghci> readFile "temp.out"
"\SUB\n"
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?
(GHC v6.l0.3)
Don*_*art 10
GHC的unicode行为在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"
??
Run Code Online (Sandbox Code Playgroud)
但是我用GHC 6.8得到你的结果.像这样:
Prelude> writeFile "/tmp/x" "?\n"
Prelude> readFile "/tmp/x"
"\SUB\n"
Run Code Online (Sandbox Code Playgroud)
因为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
??
Run Code Online (Sandbox Code Playgroud)
您可以升级到GHC 7(在Haskell平台中)以获得完整的Unicode支持吗?如果无法做到这一点,您可以使用其中一个编码库,例如utf8-string
| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |