haskell 如何读入中文文件呢?

发布于 2022-08-26 10:10:05 字数 212 浏览 23 评论 9

在 ghci 下,用 readFile 和 readUTF8File 读入中文文件,怎么显示出来都是 xxxxxxxx 这样的形式呢?

而用 let x = "你好" 显示的就是汉字。
那么,正确的读入中文文件的方法是什么呢?

谢谢各位了先。

注,用的是 utf8 的 locale, 文件编码也是用的 utf8。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

一袭白衣梦中忆 2022-08-26 15:27:56

原帖由 drunkedcat 于 2009-5-15 17:01 发表
楼上两位正解,多谢。

只是,为什么呢?用 putStrLn 就可以,

你用的 putStrLn 是 System.IO.UTF8 提供的。

用 show 就不可以?

show 用的是 GHCi 自己的。

寄风 2022-08-26 15:27:56

原帖由 MMMIX 于 2009-5-15 17:10 发表

你用的 putStrLn 是 System.IO.UTF8 提供的。

show 用的是 GHCi 自己的。

我试了一下,不加载 System.IO.UTF8, 直接用 prelude 的 readFile 和 putStrLn ,是一样的结果。能正常显示汉字。

物价感观 2022-08-26 15:27:55

楼上两位正解,多谢。

只是,为什么呢?用 putStrLn 就可以,用 show 就不可以?

女皇必胜 2022-08-26 15:27:54

原帖由 flw 于 2009-5-14 16:30 发表

那你就不要 show 嘛。
用 putStrLn

对头

魂牵梦绕锁你心扉 2022-08-26 15:27:52

原帖由 drunkedcat 于 2009-5-14 15:36 发表

谢谢版主,现在用一个绕弯的办法:
我发现,用 System.IO.UTF8 读进来的东西虽然在 ghci 下 show 的时候还是 unicode 数字,但是写回文件后就又是汉字了,也就是说,在文件 IO 上还是正常的,只是在调试 ...

那你就不要 show 嘛。
用 putStrLn

智商已欠费 2022-08-26 15:27:40

原帖由 MMMIX 于 2009-5-14 14:17 发表

System.IO.UTF8 提供的接口和 System.IO 提供的基本一样嘛,你碰到什么困难了?

谢谢版主,现在用一个绕弯的办法:
我发现,用 System.IO.UTF8 读进来的东西虽然在 ghci 下 show 的时候还是 unicode 数字,但是写回文件后就又是汉字了,也就是说,在文件 IO 上还是正常的,只是在调试时不能看写的是什么。先这样了,再看看 ghci 的 show 是如何处理的。

山色无中 2022-08-26 15:27:35

原帖由 drunkedcat 于 2009-5-14 14:08 发表
utf8-string 在 ghc 里已经有了,还是不会用,

System.IO.UTF8 提供的接口和 System.IO 提供的基本一样嘛,你碰到什么困难了?

白色秋天 2022-08-26 15:27:02

utf8-string 在 ghc 里已经有了,还是不会用,在 google 和 google code 也没找到例子,继续摸索。

余生一个溪 2022-08-26 15:26:51

原帖由 drunkedcat 于 2009-5-13 09:19 发表
在 ghci 下,用 readFile 和 readUTF8File 读入中文文件,怎么显示出来都是 xxxxxxxx 这样的形式呢?

而用 let x = "你好" 显示的就是汉字。
那么,正确的读入中文文件的方法是什么呢?

默认情况下 GHC 的 String 是不支持 UTF-8 的,你可能需要先安装 utf8-string 或类似的模块,然后使用其中的 String, readFile 等函数。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文