Shift_JIS の CSV をスプレッドシート (Google Sheets, Excel, Numbers) で開いて保存し直すと、以下の文字変換が発生する。
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 に正規化する。
スプレッドシートは 000339 を数値 339 として解釈し、先頭ゼロを除去する。
対策: CSV 上で ="000339" と出力する。スプレッドシートはこれを文字列として扱い、先頭ゼロを保持する。スプレッドシートを経由しない直接インポートでは ="000339" がそのまま残るため、インポート時に ="(\d+)" をアンラップする。
スプレッドシートはセルの末尾空白を除去する。
対策: 比較時に trimEnd() で末尾スペースを無視する。
絵文字など Shift_JIS のコード空間に存在しない文字は ? に置き換わる。UTF-8 BOM エクスポートで回避可能。