2011-12-26 47 views
4

正如标题所说,我在处理IO操作中的ASCII之外的字符(如'á','ã'等)时遇到问题。看一下例子(Unix环境):如何处理IO操作中的非ASCII字符?

import System.Cmd 
system "ls aaaá" 

至极返回ls命令代码错误:

(...)ls: can't access "aaa�" : no such file or directory(...) 

我该如何解决这个问题?

+1

它看起来像'系统'只是截断255以上的字符代码。我想你需要首先将字符串转换为您的语言环境的编码(可能是UTF8)。 –

+1

我上次检查时,Linux使用UTF-8作为文件名。我不认为'system'函数会自动进行这种转换。 –

+1

我刚刚检查过我的系统(Ubuntu,GHC 7.2.1),它只是在没有任何转换的情况下运行。 (我以前的评论是一个纯粹的猜测,我离开了我的电脑)。也许你正在使用非UTF语言环境。 –

回答

0
  1. 检查您的系统区域
  2. 检查你的哈斯克尔来源

编码如果两者都UTF8它应该工作。

+0

我检查并重新配置localeconf包以使用UTF8编码。现在,我如何检查我的Haskell源代码的编码?我尝试过'System.IO - > hSetEncoding stdin UTF8',但它不起作用:s – user1115754

+0

尝试'file foo.hs'(在shell中)并查看它报告的编码。 – ehird

+0

(但我怀疑你的问题的评论中提到的GHC错误n.m.和hammar是真正的答案。) – ehird

1

根据hammar的评论,我安装了GHC v7.2.2(我的旧版本是v6.9.9),并修复了这个错误。