毎日が86400秒の残り時間

ビル・ゲイツのように計画実行のスピードを上げる

焦らず、しかし休まず、星のように己がまわりを巡れ
(ヨハン・ヴォルフガング・フォン・ゲーテ)

Cygwinで文字化け

CygwinOcamlインタープリターを起動して、日本語を入力すると、なんか文字化けのようなかんじになった。

 

f:id:nokorijikan:20171025121843p:plain

 

$ ocaml
OCaml version 4.05.0

# "a" ;;
- : string = "a"

# "" ;;
- : string = "\227\129\130"

 

英数字は、そのまま表示される。

日本語は、なんかエスケープされたような表記になっている。

これじゃ、日本語を使った処理ができないね?

 

http://pllab.is.ocha.ac.jp/~asai/book/Windows.html

日本語の表示の仕方

箇条書き項目OCaml Win 版のトップレベルでは日本語の表示はできません。

未確認ですが、Cygwin のシェル、また Windowsコマンドプロンプトは、漢字コードを SJIS にすれば表示可能という情報を頂いています。

 

問題の切り分けとして、

  1. \227\129\130」という表示は何なのか?
  2. WindowsCygwin文字コードUTF-8からSJISに変える方法はどうするのか?

という2点を検討してみたい。

 

「\227\129\130」でGoogle検索したら、意外といろんな情報がたくさんヒットしたw

Unicode/UTF-8-character table - starting from code position 3040

 

なんか文字の対応表があって、「あ」に対応する背番号が「\227\129\130」ということのようだ。

文字コードに関する知識が必要だな?

 

UTF8の文字境界を判定 - aolog

文字「あ」は、UTF-8でバイト列「\227\129\130」と割り当てられており、文字ではなくてバイト列が表示されてしまっていたようだ。

 

バイト列って何さ?

バイト文字列とUnicode文字列 - ひきメモ

Pythonの文字列にはバイト文字列とUnicode文字列の二種類があります。

 

自分の希望としては、「\227\129\130」と表示されてしまうところを「あ」と表示して欲しいんだけど、そのために必要な設定が何か?どこをいじればいいのか?という情報が欲しい。

 

あーあ、こういう細かいところで時間を取られるのは嫌だな~。

まあ、でも文字コードに関する知識、理解を深めることができたら、それは利益だと考えて、前向きに取り組んで解決したい。

 

(参考)

http://www.cis.twcu.ac.jp/~osada/c_prog1/cygwin.html

ここの説明で「$ export LANG=ja_JP.SJIS」をやってみたけど、ocamlインタープリター内では相変わらず文字化けっぽい状態だった。

 

どうやら、cygwinで日本語を扱う環境がなく、日本語フォントを入れると解決するらしい?のだが、そのために「gnupack」というツールでcygwinをインストールすれば、簡単に日本語の対策がなされるっぽい。

もう1回やり直すのは面倒だし、何とか他の方法で日本語表示を変えたい。

粘ってダメだったら、gnupackを検討してみよう。。。

 

Cygwin のフォントを Consolas + Meiryo UI に変更する | マスクメロン

Cygwinで使用する日本語フォントを変える方法を見てみたが、問題の切り分けとして、これは関係ないような気がする。

Windowsレジストリーをいじるまでしなきゃいけないのは、何か違うと思う。

(もしそうだとして、そこまでやるつもりはない。日本語なしでOCamlを練習しても良いw)

 

解決策発見!

Googleで検索キーワードを変えたら、解決策に出会えた!!!

cygwin ocaml 日本語 文字化け - Google 検索

note103.hateblo.jp

 

github.com

 

d.hatena.ne.jp

 

d.hatena.ne.jp

 

let print_non_escaped_string ppf = Format.fprintf ppf "\"%s\"";;
#install_printer print_non_escaped_string;;

という2行を .ocamlinitとしてホームディレクトリに置いたら、インタプリタでも日本語が普通に出力されるようになった。

 

 この通りにやったら、Cygwin上のOCamlインタープリターで日本語の文字化けが治りました!

有益な情報提供、どうもありがとうございます。