Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

ghcと文字コードとWindowsと

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 でも動くことを想定したツールなんてほとんど無い気がする。