环境: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)并将其保存在硬盘驱动器上,然后在网络浏览器中打开它,
答案 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的版本。