2011-12-26 15 views
4

タイトルのとおり、私はIO操作のASCII以外の文字( 'á'、 'など'など)を扱う際に問題があります。例(Unix環境)を見てください:IO操作で非ASCII文字を処理するにはどうすればよいですか?

import System.Cmd 
system "ls aaaá" 

WICH lsコマンドコードエラーを返す:

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

が、私はこれをどのように修正することができますか?

+1

'system'のように見えるのは、255を超える文字コードを切り捨てるだけです。文字列をロケールのエンコード(おそらくUTF8)に変換する必要があると思います。 –

+1

最後にチェックしたところ、Linuxはファイル名にUTF-8を使用しています。私は 'system'関数がこの変換を自動的に行うとは思いません。 –

+1

私は自分のシステム(Ubuntu、GHC 7.2.1)をチェックしたところ、変換せずに動作します。 (私の前のコメントは純粋な推測だった、私はコンピュータから離れていた)。 UTF以外のロケールを使用している可能性があります。 –

答えて

0
  1. お使いのシステムロケールを確認し、両方のは、それが動作するはずUTF8であれば、あなたのHaskellソース

のエンコーディングを確認してください。

+0

UTF8コード化を使用するようにlocaleconfパッケージを確認して再設定します。さて、Haskellソースのエンコーディングをチェックするにはどうしたらいいですか?私は 'System.IO - > hSetEncoding stdin UTF8'で試しましたが、うまくいかなかった:s – user1115754

+0

(ファイル内で)' foo.hs'を試してみて、どのエンコーディングが報告されているかを見てください。 – ehird

+0

(しかし、私はGHCバグの疑いがあり、あなたの質問のコメントに記載されているハンマーは本当の答えです) – ehird

1

hammarのコメントに基づいて、私はGHC v7.2.2をインストールしました(以前のバージョンはv6.9.9でした)、バグが修正されました。

関連する問題