バージョン管理ソフトTortoiseSVNで、日本語を含むファイルのdiffパッチを作成すると文字化けしてしまうことがあります。本記事では原因と対策を紹介します。
文字化けを起こしてしまう環境は、TortoiseSVNに日本語翻訳リソースを適用している場合です。この環境ではマルチバイト文字コードがSJISに固定されてしまい、UTF-8で保存されたファイルまでをもSJISで読み込んでしまいます。そのため、次のように文字化けした状態で日本語文字列が保存されてしまうのです。
これを回避するためには、TortoiseSVN diffの日本語翻訳リソースを、一部分だけ英語に書き戻す必要があります。同梱されている"C:\Program Files\TortoiseSVN\Languages\ja\LC_MESSAGES\Subversion.mo"を編集します。
書き戻し箇所は、フリーソフトの日本語翻訳を手掛けているX-WORKSさんの記事が参考になります。
TortoiseSVN diff のリビジョンの文字化け (X-WORKS)
msgunfmt バイナリmo->テキストpo msgid "%s\t(revision %ld)" -msgstr "%s\t(リビジョン %ld)" +msgstr "%s\t(revision %ld)" msgid "%s\t(working copy)" -msgstr "%s\t(作業コピー)" +msgstr "%s\t(working copy)"
編集ツールはmoファイルも読み込めるVirtaalを使いました。Virtaalはお世辞にも使い易いとは言えず、私のVista x64環境ではVirtaalの動作が酷く緩慢で、常用には耐えられませんでした。通常、このような作業は、poeditでテキストリソースpoをを編集するのが一般的です。しかし、配布されている日本語リソースには、コンパイルされたバイナリ形式moしか同梱されていないため致し方ありません。
上記作業で問題の部分を英語に書き戻すと、UTF-8のようなマルチバイト文字を含むファイルも、次のように正常に差分抽出できるようになります。
ただし、TortoiseSVN diffのウィンドウ内で差分を閲覧すると、1つ目の画像のように表示上は文字化けしたままになってしまいます。ファイル的には問題ありませんので、そこは目を瞑りましょう。