2017年2月15日水曜日

MATLABのEditorをUTF-8にする方法

以下の手法はかなりバッドノウハウ的であるので,予期せぬ問題が発生する場合があります。ファイルのバックアップをとってからやりましょう。

---------------------------------------------------
MATLABで日本語で書いたコメントを,英語の環境に送り(英語のWindowsのMATLAB),それを日本語のMATLABで再度編集すると日本語が壊れることがあると思います。
これはShift_JIS特有の問題です。
Shift_JIS
特にGoogleDriveやGithubなどで共同作業するときに問題になります。    
ソースコードをUTF-8で開くためには,jvmEncodingをUTF-8に変更する必要があります。

1. 自分の設定を確かめる
feature('locale')
- Shift_JISの場合
               ctype: 'ja_JP.Shift_JIS'
             collate: 'ja_JP.Shift_JIS'
                time: 'ja_JP.Shift_JIS'
             numeric: 'en_US_POSIX.Shift_JIS'
            monetary: 'ja_JP.Shift_JIS'
            messages: 'ja_JP.Shift_JIS'
            encoding: 'Shift_JIS'
    terminalEncoding: 'Shift_JIS'
         jvmEncoding: 'MS932'
              status: 'MathWorks locale management system initialized.'
             warning: ''


2. 修正する
参考: https://jp.mathworks.com/matlabcentral/answers/280988-how-do-i-get-my-matlab-editor-to-read-utf-8-characters-utf-8-characters-in-blank-squares-in-editors
C:\Program Files\MATLAB\R2015b\bin\lcdata.xml (例)

以下を編集
        <encoding name="Shift_JIS" jvm_encoding="MS932">

        <encoding name="Shift_JIS" jvm_encoding="utf8">


3. 確認する
feature('locale')
               ctype: 'ja_JP.Shift_JIS'
             collate: 'ja_JP.Shift_JIS'
                time: 'ja_JP.Shift_JIS'
             numeric: 'en_US_POSIX.Shift_JIS'
            monetary: 'ja_JP.Shift_JIS'
            messages: 'ja_JP.Shift_JIS'
            encoding: 'Shift_JIS'
    terminalEncoding: 'Shift_JIS'
         jvmEncoding: 'utf8'
              status: 'MathWorks locale management system initialized.'
             warning: ''


4. ソースコードのエンコーディングの変更
逆に,自分のShift_JISで書かれたソースコードが文字化けしてしまっています。
そのため,KanjiTranslatorなどのソフトで文字コードを一括変換する必要があります。
http://www.kashim.com/kanjitranslator/

・補足
Github Desktop で文字化けしていたソースコードも見えるようになっているはずです。

---------------------------------------------------

上記について,SJISやMS932のエンコーディングのaliasを書き換えることで全てをUTF-8にすることができますが,そうすると
plot(1:2, 1:3);
など長さの違うベクトルでplotしようとしたときに

エラー: plot
ベクトルは同じ長さでなければなりません。

とならず,MATLABを道連れにしてエラーメッセージが出ずに強制終了する問題がありました。上記の方法ではこの問題はりません。

もっと賢い方法があれば知りたいです。Windowsのlocaleを変えるとか?

0 件のコメント:

コメントを投稿