Skip to content

Instantly share code, notes, and snippets.

@kobitoDevelopment
Created March 9, 2026 12:19
Show Gist options
  • Select an option

  • Save kobitoDevelopment/0a15b499efeeb0cdd73430de0955c90a to your computer and use it in GitHub Desktop.

Select an option

Save kobitoDevelopment/0a15b499efeeb0cdd73430de0955c90a to your computer and use it in GitHub Desktop.

CSV × スプレッドシート × Shift_JIS で発生する文字変換

Shift_JIS の CSV をスプレッドシート (Google Sheets, Excel, Numbers) で開いて保存し直すと、以下の文字変換が発生する。

1. 波ダッシュ (U+FF5E ↔ U+301C)

Shift_JIS の 0x8160 を Unicode のどの文字にマッピングするかは実装依存。

コードポイント 名称 採用元
U+FF5E FULLWIDTH TILDE Microsoft CP932 (iconv-lite 等)
U+301C WAVE DASH JIS X 0208 (スプレッドシート、Java、macOS 等)

iconv-lite で U+FF5E → 0x8160 にエンコードした CSV を、スプレッドシートが 0x8160 → U+301C としてデコードする。UTF-8 で再保存されると U+301C になり、元の U+FF5E と一致しなくなる。

また、U+301C は iconv-lite の CP932 マッピングに存在しないため、Shift_JIS エンコード時に ? (0x3F) に置き換わる。

対策: エクスポート・インポートの両方で U+301C → U+FF5E に正規化する。

2. 先頭ゼロの除去

スプレッドシートは 000339 を数値 339 として解釈し、先頭ゼロを除去する。

対策: CSV 上で ="000339" と出力する。スプレッドシートはこれを文字列として扱い、先頭ゼロを保持する。スプレッドシートを経由しない直接インポートでは ="000339" がそのまま残るため、インポート時に ="(\d+)" をアンラップする。

3. 末尾スペースの除去

スプレッドシートはセルの末尾空白を除去する。

対策: 比較時に trimEnd() で末尾スペースを無視する。

4. Shift_JIS で表現できない文字

絵文字など Shift_JIS のコード空間に存在しない文字は ? に置き換わる。UTF-8 BOM エクスポートで回避可能。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment