OCaml コード中の日本語(特に Shift_JIS) の扱いと OCaml 大駱駝パッチ
OCaml の対話型インタプリタと文字コード (一人読書会番外編) http://d.hatena.ne.jp/h810tsukagoshi/20090802/1249233046
OCaml, 一人読書会 ( プログラミングの基礎 )
問 4.8 をやっていたときのこと。
# #use "C:/Program Files/Objective Caml/mylib/tsurukame.ml";; File "C:/Program Files/Objective Caml/mylib/tsurukame.ml", line 1, characters 1-2: Error: Illegal character (サ)このエラーしか出なくなった。
色々試してみた結果、どうやらこのインタプリタは ANSI 文字コードしか通らないらしいことが分かった。
[中略]
意外とこのことに関する日本語の情報が少ないな。
だそうなので書いてみました。まあ今までも似たようなことを書いてきましたが、そのまとめバージョンです。
OCaml プログラムの文字コードについて
OCaml は ANSI より広い ISO8859-1 で書かれたソースコードを受け取ります。結果、というか、これが動機なのですが、フランス人はコード中に自国語のアクセント記号のついた変数を定義することが出来ます。Caml-light のフランス語教科書などに例があります。
ただし文字列に関しては EUC, UTF-8 など、ANSI 領域のキャラクタ (" や \) が出現しないコードであればそれなりに正しく動作します*1。変数等を EUC, UTF-8 で書きたいという奇特な方は大昔に書いたこの情報をお読みください。やらないほうがよいです。というか、やる人がいるとは思えません。
OCaml プログラム中で Shift_JIS の文字列を扱う
なお、Shift_JIS は漢字中に \ が出現するため文字列の解釈がおかしくなり、エラーになります。(参考)
私はこの浅井先生の本
プログラミングの基礎 ((Computer Science Library))
- 作者: 浅井健一
- 出版社/メーカー: サイエンス社
- 発売日: 2007/03/01
- メディア: 単行本
- 購入: 17人 クリック: 409回
- この商品を含むブログ (127件) を見る
しかし、 id:h810tsukagoshi さんの例だとコードの頭に変なキャラクタがあったようなんだけど、何をやったんだろう?
*1:id:ytqwerty さんが指摘されたとおり、String.uppercase などの大文字小文字変換は ISO8859-1 を意識して動くので日本語が潰れます。