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 の文字コードで悩んでいる方の参考になれば幸いです。