haskell 如何读入中文文件呢?
在 ghci 下,用 readFile 和 readUTF8File 读入中文文件,怎么显示出来都是 xxxxxxxx 这样的形式呢?
而用 let x = "你好" 显示的就是汉字。
那么,正确的读入中文文件的方法是什么呢?
谢谢各位了先。
注,用的是 utf8 的 locale, 文件编码也是用的 utf8。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
你用的 putStrLn 是 System.IO.UTF8 提供的。
show 用的是 GHCi 自己的。
我试了一下,不加载 System.IO.UTF8, 直接用 prelude 的 readFile 和 putStrLn ,是一样的结果。能正常显示汉字。
楼上两位正解,多谢。
只是,为什么呢?用 putStrLn 就可以,用 show 就不可以?
对头
那你就不要 show 嘛。
用 putStrLn
谢谢版主,现在用一个绕弯的办法:
我发现,用 System.IO.UTF8 读进来的东西虽然在 ghci 下 show 的时候还是 unicode 数字,但是写回文件后就又是汉字了,也就是说,在文件 IO 上还是正常的,只是在调试时不能看写的是什么。先这样了,再看看 ghci 的 show 是如何处理的。
System.IO.UTF8 提供的接口和 System.IO 提供的基本一样嘛,你碰到什么困难了?
utf8-string 在 ghc 里已经有了,还是不会用,在 google 和 google code 也没找到例子,继续摸索。
默认情况下 GHC 的 String 是不支持 UTF-8 的,你可能需要先安装 utf8-string 或类似的模块,然后使用其中的 String, readFile 等函数。