4
0

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.

ShiftJISファイルをWinMergeしているのにエンコーディングエラーが表示される場合の原因確認方法

Posted at

はじめに

この記事で取り扱う事象はWinMergeに限った話ではなくShiftJISCP932の違いによって発生するものであり、私がたまたまWinMergeで遭遇しただけなので、場合によっては他の現象の原因確認にも応用が効くものである。

つまり何が言いたいかっていうと、文字コード問題はマジで徒労ということである。

参考になる記事

@egg_chicken さんの以下の記事がとても参考になり、解決の糸口になった。多謝
https://qiita.com/egg_chicken/items/53f1a5922487a572eaf4

何がおきたか?

とあるふるーいアプリケーションから出力されたCSVファイル(ShiftJIS)をWinMergeで比較しようとしたら、『エンコーディングエラーにより情報が失われています。』とエラーが表示されたとユーザーより相談された。

image.png
※画像はWinMerge2.12.4.20+jp-20 のもの。
image.png
※2019年2月現在最新のWinMerge2.16.0.7では上記のように表示される。

なぜおきたか?

WinMergeのマージ前動作

WinMergeはエンコードを揃えるため、ファイルをShiftJIS(CP932)で開きなおし、エンコーディングを行っている。
image.png

例えばUTF-8のテキストをWinMergeに放り込むと、見事に文字化けし、同様のエラーが表示される。
image.png
これは上記のエラー原因を調べている時に知ったことだが、プラグイン等を使うことで、これを吸収することができる。例えばExcelファイルを比較するなんていうこともできる。

では今回のケースはどうか?

この CP932 に開き直す動作を取った時にエンコーディングに失敗し情報が欠損すると、上記のエラーが表示される。ただし、その該当箇所がどこであるかはWinMergeではわからない。

全体が文字化けしていれば、ファイル全体のエンコーディングによるものであるとわかるが、今回は元のファイルも CP932と同意(だと思っていた)である ShiftJIS であり、一見すると問題の無いファイルでエラーが発生しているような状態だった。

検索してもOfficeファイルを比較した場合の例などしか無く、調べるうちに文字コード問題の深淵へ足を踏み入れていくのであった・・・。

今回の原因 ShiftJIS≒CP932

今回WinMergeを通したファイルは ShiftJIS で作成されたファイルで、一見するとWinMerge上でも問題なく表示されており、エラー文の通りのエンコーディングエラーによる情報損失は発生していないように見受けられる。

ただ、このファイルを サクラエディタ で開き、 CP932 で保存すると原因の箇所が炙りだされた。
※サクラエディタに限らず、CP932で保存できるエディタなら確認できると思いますが、今回はサクラエディタで説明します。

サクラエディタでSJISファイルをCP932で保存する。

通常の名前をつけて保存ダイアログではコードページ(CP)のエンコード形式は表示されない。
image.png

今回問題が発生したファイルを何度SJISで保存し直してもWinMergeでのエラーは解消しなかったが、文字コードセットの CP にチェックをいれると、以下のようにCP932が選択できるようになる。
image.png

そしてCP932で保存をするとWinMergeで怒られていた内容と同じようなことを言われる。
image.png

ただし、WinMergeと異なるのは、このままキャンセルを選択すれば、原因となっている箇所へジャンプができるという点だ。
あとは、該当箇所を削除するなり、もとのアプリケーションを訂正するなりすれば、WinMergeでのエラーも解消する。

まとめ

  • WinMergeはファイルを CP932(ShiftJIS)* に変換して比較をしている。
  • CP932ShiftJIS は≒(ニアイコール)の関係であり、相互変換をした場合に情報が欠落する場合がある。
  • サクラエディタでCPのチェックを入れいると、文字コードをコードページ指定で選択でき、保存することができる。
4
0
0

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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?