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

icdiffでutf-8とshift-jisの両方を一度に比較する方法(おそらく非推奨)

Posted at

icdiffとは

ターミナル上で横並びにファイル比較ができるツール。

公式でも紹介されているように、gitに組み込むこともできる。

icdiffのデフォルトエンコーディングはutf-8

以下のようにデフォルトでutf-8で読み込むようになっている。

    parser.add_option(
        "--encoding",
        default="utf-8",
        help="specify the file encoding; defaults to utf8",
    )

ところが、業務でutf-8shift-jisの両方を同時に扱うことがある。
そのため差分ファイルにutf-8shift-jisが混ざった状態でgit icdiffを叩くと、shift-jis側のファイルはエンコードエラーとなる。

error: file 'filename.jsp' not valid with encoding 'utf-8': <invalid start byte> at 191-192.

shift-jisのオプションをつけると今度はutf-8のファイルがエラーになる。

特定のファイルだけshift-jisで開くように無理やり改造

以下3行を追加して特定のファイル(*.jsp)だけsjisで無理やり読み込むようにした。

def read_file(fname, options):
    try:
        with codecs.open(fname, encoding=options.encoding, mode="rb") as inf:
            return inf.readlines()
    except UnicodeDecodeError as e:
+++     if '.jsp' in fname:
+++         with codecs.open(fname, encoding='sjis', mode="rb") as inf:
+++             return inf.readlines()
        codec_print(
            "error: file '%s' not valid with encoding '%s': <%s> at %s-%s."
            % (fname, options.encoding, e.reason, e.start, e.end),
            options,
        )
        raise
    except LookupError:
        codec_print(
            "error: encoding '%s' was not found." % (options.encoding), options
        )
        sys.exit(EXIT_CODE_ERROR)

pythonには詳しくないが、例外処理の中を無理やり書き換えているのであまり良くないのはわかる。
他にいいやり方ご存じの方教えてください。

0
0
1

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