48
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Git / SourceTree で、Shift JIS ファイルの差分を文字化けなく表示する

Last updated at Posted at 2018-09-10

歴史的経緯など、やんごとなき事情により、現在でも文字コード Shift JIS の案件があります。あるところには、あります。

そういった UTF-8 以外の文字コードに対して git を使用した場合、diff が文字化けして読めない!!! といった事態が発生します。

スクリーンショット 2018-09-10 18.01.51.png

その対処方法です。
(Mac でしか検証していませんが) 以下の方法で、ターミナルでも SourceTree でも、SJIS の差分の文字化けが解消できました。

設定

.gitattributes ファイルと、config の textconv 設定を利用します。

まず、プロジェクトのルートディレクトリに、 .gitattributes ファイルを作成。

今回は拡張子 html のファイルはすべて Shift JIS とみなし、以下のように記述します。

*.html diff=sjis

これは拡張子 html のファイルには、差分表示時に sjis というフィルタを使え、という設定です。

続いて、sjis という差分表示用のフィルタを定義します。

$ git config diff.sjis.textconv "iconv -f sjis"

Mac には最初から文字コード変換コマンドとして iconv が入っています。こちらを利用し、iconv コマンドで Shift JIS を UTF-8 に変換してから diff を表示せよ、という設定になります。

上記2つの組み合わせで、拡張子 html のファイルの差分は、iconv によるコード変換を通した結果が出力されるというわけです。

ちなみに、さきほどの git config コマンドにより、.git/config ファイルには以下のような設定が追記されます。

[diff "sjis"]
	textconv = iconv -f sjis

結果

いけたー 🙌

スクリーンショット 2018-09-10 18.02.05.png

SourceTree でもいけたー 🙌

スクリーンショット 2018-09-10 18.29.42.png

参考

48
46
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?