Haskell - 将unicode(字符串,字符)保存到文件中

时间:2015-01-17 20:17:10

标签: haskell unicode utf-8 unicode-string

环境:windows 7 64,ghci 7.8.3

IN GHCI

\197 <-> Ć

Prelude> putStrLn "\197"
*** Exception: <stdout>: hPutChar: invalid argument (invalid character)

最后

我尝试使用writeFile函数将String保存到文件;

writeFile "filename.txt" "ćĆ"
-- content in "filename.txt" -> †Ź

如何写入字符引号(&#34;)

content2 = "\"http:\\www.google.com\""
writeFile "filename2.txt content2
  • 如何在没有转义字符
  • 的情况下存储在文件content2
  • 因为我想存储类似href="http:\\www.google.com"
  • 的内容

如果这是错误的方式,如何下载网页(html)并将其保存在硬盘驱动器上,然后在网络浏览器中打开它,

1 个答案:

答案 0 :(得分:1)

默认情况下,新创建的句柄会影响操作系统报告的语言环境(请参阅System.IO.localeEncoding)。在Windows中可能是一个非常古老的代码页...所以一种方法是在启动Haskell可执行文件之前将代码页更改为65001(使用chcp 65001)。如果这不令人满意,您可以使用System.IO.hSetEncoding(甚至是stdout)更改代码中任何句柄的编码,甚至使用ByteString IO(二进制)并自己进行编码/解码(如果您不这样做,可能会出现过度杀伤)。需要非常精确的控制)。请注意,这意味着无法使用writeFile,因为您没有看到句柄,您必须编写自己的变体:

writeFileWithEncoding fp content enc =
  withFile fp WriteMode $ \h -> do
    hSetEncoding h enc
    hPutStr h content

或者只是专门针对utf8的版本。