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

Shift_JISのCSVを安全に修正する方法(Git Bash / iconv)

Posted at

Shift_JISのCSVを安全に修正する方法(Git Bash / iconv)

業務で Shift_JIS(Shift Japanese Industrial Standards)の CSV を修正する必要があり、
文字コードの扱いで想像以上にハマったため、
安全に修正する手順を備忘録としてまとめました。


背景

業務で受け取った、あるいは既存システムから出力された Shift_JIS(Shift Japanese Industrial Standards)の CSV を修正する必要がありました。

要件は次の通りです。

  • CSV 内には 日本語の文章 が含まれている
  • 不要な改行や文言を 目視で確認しながら修正したい
  • 修正後も Shift_JIS のまま 後続システムに渡す必要がある
  • 修正前後の差分を レビューできる形で残したい

一見すると「エディタで開いて直すだけ」に見えますが、
文字コードが Shift_JIS の場合、安易な編集は 不可逆な文字化け を引き起こします。


ハマりどころ

1. Visual Studio Code(VSCode)で「Shift_JISで開く」と日本語は見える

Visual Studio Code(VSCode)の「エンコード付きで開く」で Shift_JIS を指定すると、
日本語は一見正しく表示されます。

しかし、この状態で保存すると、
文字化け・文字欠損が発生するケースがあります。

これは「表示できている」だけで、
保存時に再エンコードが発生するためです。

💡 VSCode は内部的に UTF-8 を前提としており、
Shift_JIS ファイルは表示用に変換されているだけ、という点が落とし穴になります。


2. UTF-8 で編集すると Shift_JIS 表示が崩壊する

UTF-8(Unicode Transformation Format – 8-bit)のまま不要な改行を削除した後、
再度 Shift_JIS 表示に切り替えると、

  • 全体が文字化け
  • 意味不明な記号の羅列

になることがあります。

この時点で「ファイルを壊したのでは?」と疑いましたが、
実際は UTF-8 のバイト列を Shift_JIS として無理に解釈しているだけでした。


3. 実体は Shift_JIS なのに Windows では UTF-8 に見える

Linux 上で次のように確認すると、

nkf --guess sample.csv
# Shift_JIS (LF)

と判定されますが、
Windows や Excel では UTF-8 のように扱われることがあります。

これは以下の理由によるものです。

  • ファイル先頭が ASCII 文字のみ
  • Shift_JIS のバイト列が UTF-8 としても成立してしまう

結果として、
アプリケーション側が文字コードを誤判定します。

💡 Excel は特に「文字コードの自動判定」を行うため、
明示的に指定しない限り、誤認識が起きやすい点に注意が必要です。


解決策(結論)

編集は UTF-8、安全な中間形式を挟む

最終的に採用したのは、次の流れです。

Shift_JIS → UTF-8 → 編集 → UTF-8 → Shift_JIS

編集作業は UTF-8 で行い、
最後に Shift_JIS に戻すことで、

  • 日本語を正しく確認できる
  • 文字化けを防げる
  • 修正前後の差分を確認できる

という全要件を満たせました。


実践手順(Git Bash)

※ 本手順は Windows 環境で Git Bash を使用する想定です。


1. Shift_JIS → UTF-8 に変換(編集用)

iconv -f SHIFT_JIS -t UTF-8 original.csv > edit_utf8.csv
  • iconv は POSIX 標準の文字コード変換コマンド
  • 元ファイルは変更されません
  • UTF-8 のため、どのエディタでも安全に表示できます

2. UTF-8 のまま編集

code edit_utf8.csv
  • 不要な改行の削除
  • 日本語文章の修正
  • CSV の整形

すべて UTF-8 のまま実施します。

💡 差分確認を行う場合は、この時点で Git 管理しておくと便利です。


3. UTF-8 → Shift_JIS に戻す

iconv -f UTF-8 -t SHIFT_JIS edit_utf8.csv > edited_sjis.csv
  • 修正後も Shift_JIS(LF)を維持
  • 後続システムにそのまま渡せます

4. 修正前後の差分確認

diff -u original.csv edited_sjis.csv
  • 日本語のまま差分を確認可能
  • レビューや履歴管理に有効です

なぜこの方法が安全なのか

  • Shift_JIS は 可変長で曖昧な文字コード
  • エディタ保存時の再変換で文字が失われやすい
  • UTF-8 は Unicode を完全に扱える

編集と保存を UTF-8 に限定することで、
不可逆な文字化けリスクを排除できます。


よくありそうな補足・注意点(先回り)

  • nkf と iconv はどちらを使うべき?
    → 変換用途であれば iconv、判定用途であれば nkf が無難です。

  • Excel で直接直してはいけない?
    → Excel は文字コードを暗黙変換するため、意図せず壊れる可能性があります。

  • 改行コード(CRLF / LF)は影響する?
    → 本記事では LF を前提としています。必要に応じて dos2unix 等で調整してください。


まとめ

  • Shift_JIS の CSV を直接編集するのは危険
  • 「表示できる」と「安全に保存できる」は別物
  • 一度 UTF-8 に変換してから編集するのが正解
  • 最後に Shift_JIS に戻せば、後続処理も安心

同じように CSV の文字コードで悩んでいる方の参考になれば幸いです。

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