Matlab スクリプトの強引な UTF-8 化

前回の記事で 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