2012-02-02 11 views
1

私はXMLファイルを生成するHaskellプログラムを書いています。明らかに、<?xml?>タグで文字エンコーディングを指定するのは伝統的と考えられます。私の質問は、何が最善のことですか?ハスケル文字エンコーディング

  1. 使用hGetEncodingは、ファイルのエンコーディングを検索し、XMLファイルのヘッダーにこれを記録します。

  2. hSetEncodingを指定してください。を指定して、それをXMLファイルのヘッダーにハードコードします。

最初のオプションは、HaskellがエンコーディングをXMLと呼んでいるものに変換する方法が必要であるという問題があるようです。 2番目の問題は、私のPC上の他のすべてのアプリケーションのエンコーディングが何であるかを知ることができなければ、ファイルを読むことができないということです(Webブラウザを除く)。

私はほとんど確かにしていないので、どちらもやや邪魔ですとにかくユニコード。 (それは、ありませんああ、しかし£記号は符号化によって異なりますため息?)私は...ない特殊文字を平易普通の英語のテキストを書いている

答えて

3

Hackageの既存のXMLライブラリ(xml-conduitなど)を使用することをお勧めします。このライブラリは自動的にエンコードの問題を処理します。一般的には、UTF-8データを出力することを強くお勧めします。

+0

XMLファイルは、巨大な複雑なXMLソリューションを必要としないほど簡単です。 UTF-8を明示的に要求することができます。私の唯一の懸念は、私がそれを行うと、ファイルがNotepadで正しく開かれないということです。 (AFAIK、デフォルトはWindowsのデフォルトエンコーディングのデフォルトになります) – MathematicalOrchid

+0

@MathematicalOrchid - XMLファイルを生成している場合、あらかじめ作成されたXMLソリューションを使用すると、自分自身を作成するよりも簡単に(そして安全に)なります。また、Monadsの愛のために、Notepad ++を使うか、メモ帳よりやや強力なものを使う。 –

+0

今後の訪問者の方:メモ帳で正しく開きます。 UTF-8としてASCIIコード化されても、ASCIIのままです。 – user31389

1

を一般的には:あなたはあなたをコードするかを決めるあなたのアプリで内部的に対処したい、そしてあなたが出力したいエンコーディングをしたいのです。それを偶然やいくつかのコンポーネントの気まぐれに放置しないでください。 ご存知のあなたが扱っているエンコーディングは、となります。あなたはのエンコーディングを希望します。は適切な相違を処理し、対応します。

私は内部と外部のエンコーディングがUTF-8であることを確認し、他のエンコーディングにある入力をUTF-8に変換してから、何か他のことをする前にそれを変換します。 Unicodeが必要かどうかにかかわらず、の何かをに標準化しなければなりません。また、Unicodeを使用する具体的な理由がない限り、あとで問題にならない最も汎用性の高い選択です。

+0

_internal_エンコーディングは問題ではありません。 HaskellのI/Oライブラリは自動的にすべてをHaskellの内部文字エンコーディングに変換します。これは本質的にUTF32です。それらの同じI/Oライブラリは、私が求めている方法で私の出力をエンコードします。問題は、何を求めるかです。 (またはデフォルトの選択肢が何であるかを尋ねるかどうか) – MathematicalOrchid

+0

また、UTF-8とUTF-16はXML標準でサポートが必要な唯一のエンコーディングなので、そのうちの1つで標準化するのは非常に意味があります。 – hammar

+0

@マスフェアでは、Unicodeを使う理由は十分です。私はそれがエンコーディングをどのように扱うか知るためにハスケルにそれほどではないが、これはもっと一般化されたステートメントである。 :) – deceze

0

私はオプション#2に行きます - デフォルトの動作に依存するよりもエンコードを制御する方が良い

Joel Spolskyが言ったように:there ain't no such thing as plain text