読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

ghcと文字コードとWindowsと

haskell

ghc さんは、エラーメッセージに ascii の範囲外の文字を平気で使ってくる。これ、環境によってはハマるので勘弁して欲しい。具体的にはWindowsなんだけど。

例えばこんなメッセージ。

Prelude> 3 / 4 :: Int

<interactive>:1:1: error:
    • No instance for (Fractional Int) arising from a use of ‘/’
    • In the expression: 3 / 4 :: Int
      In an equation for ‘it’: it = 3 / 4 :: Int

メッセージ作ってる ここ とか ここ を見る限り、環境によっては使わないっぽい。この使うかの判定は ここ でやってる。ロケールエンコーディング"‘’" が可逆に変換できるか見てるっぽい。可逆であればいいので、ロケールがユーザが望むエンコーディングに設定されているかは関係ない。つまり、文字化けの起こる状況でも容赦なく使ってくる。

で、 localeEncoding がどう決まるかだが、 Windowsか否かで判定が別れているWindowsだと code pageを使って判定している ようで、 chcp 65001 している環境だと UTF-8 になる。 932 の状態だと CP932 で入出力を扱おうとするので、 UTF-8 を期待するようなツールがどっかに入っていると面倒なことになる。というか、今時 CP932 でも動くことを想定したツールなんてほとんど無い気がする。