椿の日記

たぶんプログラムの話をします

文字列の内部表現

HaskellのソースをUTF-8で書いてたからリテラルも当然UTF-8だと思ってたら、んなわけがなかったですね。ちゃんとUCS-4に変換してありました。なので、プログラムの内部では常にUCS-4で扱い、入出力部分でエンコーディングを変換するのが良いみたい。

てか、そんな仕様なら、getContentsの戻り値がStringなのってどうなんだろう。Char型がUCS-4をあらわす型であるならgetContentsとかはWord8にしておいたほうが…と思ったけど、そうなってないなら何かしら理由があるんでしょう。

C++でも「(メモリ配置的に)データ構造は同じでも、(数学的に)意味が違うので型を分ける」ということがたまにあるんですが、似たような話でしょうか…。どうやって解決するのがよいのやら。