2016-05-10 10 views
1

私はハスケルスクリプト何をputStrいくつかのもの...とこの出力私はWebページに表示したい。私はHaskellscriptをコンパイルし、CGIスクリプトのように実行させて、うまく動作します。ハスケルとウェブ(UTF-8)

しかし、私はputStrに特殊文字がある場合、それは失敗します。

ターミナル - 出力:

<p class="text">what happrns at ä ?</p> 

ウェブ出力:

what happrns at 

そしてその背後に何が表示されています。 ..起こったの?

答えて

3

いくつかの質問:あなたのCGIスクリプトを送信している何Content-typeヘッダ

  1. stdoutハンドルでエンコードを設定していますか?

常にContent-typeヘッダーを送信し、そのヘッダーに文字エンコードを指定する必要があります。詳細はthis pageを参照してください。

また、Haskellファイルハンドルのエンコーディングは、OSの現在のデフォルトによって決まります。それはUTF-8かもしれませんが、それはまた別のものかもしれません。詳細については、this SO answerを参照してください。だから、あなたが送った文字がWebページ上で正しく表示されていることを確認するために

、私はなります

  1. stdoutのエンコーディングも設定されていることを確認したcharset = UTF8で
  2. Content-typeヘッダを送信utf8へ:

    import System.IO 
    ... 
    hSetEncoding stdout utf8 
    

場合Content-Typeヘッダとあなたの出力エンコーディングが合意すれば、うまくいくはずです。

+0

ありがとうございました。私は 'hSetEncoding'を忘れました、これは重要なことでした。 –

1

Haskellプログラムがutf-8を適切に出力していると仮定しても、使用しているエンコーディングをブラウザに知らせる必要があります。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 

(<ヘッド>タグ内に以下を追加)を以下のようにHTML 4では、あなたはこれを行うことができます。HTML 5では

あなたはHaskellのプログラムは、これはあなたが表示されますコマンドラインで

./myProgram | xxd 

をXXD使用して正しい形式を出力していることを確認することができます

<meta charset="UTF-8"> 

使用することができます実際の出力はバイト単位であるため、文字単位で検証することができます。

+0

私はすでに ''を 'index.html'に入れていますが、これはタグの中にäddという意味ですか? –

+0

申し訳ありません、' 'タグ出力をカットしました。私は応答を修正しました.xxdの出力を見た結果はどうでしたか? – jamshidh

+0

私は分かりません。 –