Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

この記事で取り扱う事象は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のチェックを入れいると、文字コードをコードページ指定で選択でき、保存することができる。
carbonss
根性系社内SE。インフラ、開発、ITサポート、プロジェクト管理、ハード、ソフト、なんでも泥臭く出来ないなりにやる。15分調べてでわからなかったことは、誰かが15分でたどり着けるようにQiitaに書き残す。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away