2011-12-26 41 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),並修復了這個錯誤。