前回の記事で Jenkins 出力を UTF-8 にすることができましたが、Matlab エディタ上で生成するスクリプトは SJIS のままでした。ひとまず、以下のようにして LANG の設定も追加してみましたが、m ファイルの文字コードは SJIS のままでした。getenv('LANG') としてみると、ちゃんと「ja_JP.UTF-8」が帰ってくるのですが。
setenv('SHELL', '/bin/sh'); feature('DefaultCharacterSet', 'UTF-8'); feature('DefaultCharacterSet'); setenv('LANG','ja_JP.UTF-8');
どこに設定ファイルがあるのだろうと調べたところ、$HOME/.matlab の中に matlab.setting というファイルがありました。あまり関係ないかもしれませんが、ヘルプの言語の部分で ja_JP の CDATA を取得しています。
<settings name="help" visible="true"> <key name="DocLanguage" visible="true"> <string> <value><![CDATA[ja_JP]]></value> </string> </key> <key name="SingleSource" visible="true"> <bool> </bool> </key> </settings>
これをキーワードに Google 検索してみたところ、MacOSX encoding problem というページを見つけました。ここによると lcdata.xml を編集せよとあります。早速その場所に移動してみます。
cd /Applications/MATLAB_R2014a.app/bin
このフォルダには、lcdata.xml というファイルだけでなく、lcdata_utf8.xml というファイルがありました。
lcdata.xml の方は
<locale name="ja_JP" encoding="Shift_JIS" xpg_name="ja_JP.SJIS"> <alias name="ja"/> </locale>
となっているのに対し、lcdata_utf8.xml の方は
<locale name="ja_JP" encoding="UTF-8" xpg_name="ja_JP.UTF-8"> <alias name="ja"/> </locale>
となっています。特に切り替える仕組みは用意されていないようなので、以下のように自分で手を加えてしまいました。
mv lcdata.xml lcdata_sjis.xml ln -s lcdata_utf8.xml lcdata.xml
この状態で Matlab を立ち上げたところ、スクリプトファイルの日本語が文字化けしました。外部のエディタで文字コードを UTF-8 に変更したところ、無事に Matlab エディタ上で日本語が表示されました。このやり方でいいのかわかりませんが、しばらく様子を見てみようと思います。ただ、今まで書いたコードの文字コード変換しないと文字化けしまくりですね。
P.S.
Jenkins が文字化けしていると思ったら、Jenkins をアップデートしたときに日本語設定が消えてしまったらしい。調べたら /etc/launchd.conf に設定を書くと上書きされないのでよいとの記事を見つけた。忘れないようにメモしておきます。
MacでJenkinsサーバーを構築時に日本語の文字化けを解消する
詳しくは、/etc/launchd.conf に以下の記述をすればよいとのこと。
setenv JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8