csv-encoding-sjis-validator
EC用のCSVファイルが各モールの要求する文字コード(Shift_JIS/UTF-8/BOM有無)と改行コード(CRLF/LF)に適合しているか、文字化け・先頭0落ち・カンマやダブルクォート崩れ・Shift_JIS範囲外文字(機種依存・絵文字・①②/㍑等)が混入していないかを検証するスキル。「CSVが文字化け」「Shift_JISエラー」「UTF-8で開けない」「BOM付き/無し」「先頭0が消える」「Excelで開いて壊れた」「機種依存文字が混入」「楽天CSVのエンコード」「絵文字が含まれている」「改行コードが違う」など、ECモール向けCSVの文字コード・改行・形式不備の検出と修正で使う。楽天(Shift_JIS/CRLF)・Amazon(UTF-8/タブ区切り)・Yahoo(UTF-8/CRLF)・ネクストエンジン・クロスモール対応。※モール間のCSV列マッピングは別スキル `mall-to-mall-csv-mapper`、Amazonフラットファイルの属性エラーは `amazon-flat-file-validator-jp`、JANのチェックデジットは `jan-code-checker`。 【ALSEL独自スキル】株式会社ALSEL が、19年・5,000社超の EC 支援で得たノウハウをもとに開発したオリジナルスキルです。
SKILL.md 本文
CSV文字コード・形式バリデータ
概要
各ECモールのCSV要件(文字コード・改行コード・区切り文字・引用符・BOM有無)に適合しているかを検証し、文字化け・先頭0落ち・Shift_JIS範囲外文字(機種依存文字・絵文字・古い丸数字・特殊記号)・Excel保存時の破壊・カンマ/改行のエスケープ崩れを検出する。
★最重要原則
「Excelで開いて保存」が最大の事故源。 Excelは独自にエンコード変換・先頭0除去・日付自動変換・カンマ追加を行う。CSVを編集するならテキストエディタ or 専用ツールを原則とし、Excelで開いた時点で「変更されている可能性」を疑う。さらに、楽天はShift_JIS/CRLF、Amazonはタブ区切りUTF-8、YahooはUTF-8/CRLF、と要件が違うため、モールごとの要件を最初に確定してから検証する。
知識ベース
詳細は references/ を参照:
- 文字コード(Shift_JIS/CP932/UTF-8/UTF-8 BOM)の自動判定とエッジケース:
references/encoding-detection.md - Shift_JIS範囲外文字(機種依存・古い丸数字・絵文字・特殊記号)の一覧:
references/sjis-out-of-range.md - Excelで壊れるパターン(先頭0/指数表記/日付化/JANコード破損/文字コード勝手変換):
references/excel-traps.md - カンマ・ダブルクォート・改行のエスケープ崩れ:
references/delimiter-quote-issues.md - 実例集(楽天/Amazon/Yahoo/ネクストエンジン):
references/examples.md
要点(本ファイルに留める):
モール別CSV要件
| モール | 文字コード | 改行 | 区切り | 引用符 |
|---|---|---|---|---|
| 楽天RMS | Shift_JIS(CP932) | CRLF | カンマ | ダブルクォート |
| Amazon | UTF-8 | LF | タブ | (タブ区切りのため引用符不要) |
| Yahoo!ショッピング | UTF-8(BOM任意) | CRLF | カンマ | ダブルクォート |
| Shopify | UTF-8 BOM付推奨 | LF/CRLF | カンマ | ダブルクォート |
| ネクストエンジン | Shift_JIS or UTF-8 | CRLF | カンマ | ダブルクォート |
| クロスモール | Shift_JIS or UTF-8 | CRLF | カンマ | ダブルクォート |
| BASE | UTF-8 | LF/CRLF | カンマ | ダブルクォート |
| makeshop | Shift_JIS | CRLF | カンマ | ダブルクォート |
Shift_JIS(CP932)範囲外で頻出する文字
- 機種依存:① 〜 ⑳、㍻・㍼・㍽・㍾、㈱・㈲、Ⅰ〜Ⅻ、㍑・㎏・㎝(CP932は一部含むがJIS X 0208外)
- 絵文字:絶対NG。U+1F系・U+2600系の各種
- 環境依存:髙(はしごだか)/﨑(たちさき)/彅/瀨(旧字体)の一部
- 全角チルダ/波ダッシュ問題:~(U+FF5E)と〜(U+301C)の混在
Excel保存時の典型破壊
| 現象 | 原因 | 対策 |
|---|---|---|
JAN 4901234567894 → 4.901234567894E+12 | 指数表記化 | 列を「テキスト」型でインポート |
商品コード 00123 → 123 | 先頭0除去 | 同上 |
2024-01-15 → 日付シリアル値 | 日付自動認識 | 同上 |
1-2-3 → 「2001/2/3」 | 日付自動認識 | 単一引用符前置 or テキスト型 |
| 文字化け | エンコード勝手変換 | Power Query/テキストエディタ使用 |
カンマ・引用符・改行のエスケープ
- カンマを含む値はダブルクォート囲み:
"商品名, おまけ付き" - ダブルクォート自身は2連で:
"商品""限定""版" - 値内改行はLF/CRLFどちらにせよ引用符内で許容(モールにより制限あり)
処理フロー
Step 1:CSVのバイト列レベル検査
入力されたCSVファイル(テキスト or バイナリ)の冒頭を検査:
- BOM(
EF BB BF= UTF-8 BOM、FF FE= UTF-16 LE等)の有無 - 改行コード(
0D 0A=CRLF、0A=LF、0D=CR) - ヘッダー行の文字パターンから推定エンコード
Step 2:エンコードの自動判定
references/encoding-detection.md の判定フローで:
- BOMがあればそれに従う
- ASCII範囲内(0x00-0x7F)のみなら判定保留
- 0x81-0x9F、0xE0-0xFC が頻出 → Shift_JIS/CP932
- 0xC2-0xF4 が3-4バイト連続 → UTF-8
- 判定不能・両方解釈可能な場合は両方試して「文字化けが少ない方」
Step 3:モール要件との照合
ユーザー指定のモール要件と実際のCSVを比較:
- 文字コード一致/不一致
- 改行コード一致/不一致
- 区切り文字(特にAmazonのタブ区切りに注意)
- BOM要件
Step 4:範囲外文字の検出
references/sjis-out-of-range.md の禁止文字リストで全行スキャン:
- Shift_JISエンコード時に「?」「・」に化けるUnicode文字
- 絵文字・記号
- 機種依存文字
- 該当行・列・該当文字を出力
Step 5:Excel破壊の検出
references/excel-traps.md のパターンで検査:
- 数字列に指数表記(
E+12)混入 - 日付列にシリアル値(5桁数字)混入
- 先頭0が必要な列(JAN、商品コード等)の桁数異常
- ハイフン区切り型番が日付化
Step 6:エスケープ崩れの検出
- 引用符のないカンマ混入で列数不一致
- 引用符の途中欠落で行数不一致
- 改行混入で行数異常
Step 7:修正手順とコマンド提示
修正方法を明示:
- 文字コード変換(
iconv -f UTF-8 -t CP932 in.csv > out.csv) - BOM除去(先頭3バイト削除)
- 改行コード変換(
tr/sed) - Excel編集を経た場合の再エクスポート手順
出力フォーマット(必須)
# CSV文字コード・形式 検証結果
## 0. 検査対象
- ファイル名:
- サイズ:
- 想定モール:<楽天/Amazon/Yahoo/Shopify/ネクストエンジン/クロスモール/その他>
## 1. バイト列検査結果
| 項目 | 検出値 | モール要件 | 一致 |
|---|---|---|---|
| 文字コード(推定) | | | |
| BOM | | | |
| 改行コード | | | |
| 区切り文字 | | | |
## 2. 範囲外文字の検出
| 行 | 列 | 該当文字 | Unicode | 対策 |
|---|---|---|---|---|
| | | ① | U+2460 | ⑴ or (1) に置換 |
## 3. Excel破壊の疑い
| 行 | 列 | 検出パターン | 原データ推定 |
|---|---|---|---|
| | | 指数表記 | JANコード13桁 |
| | | 先頭0欠落 | 商品コード |
## 4. エスケープ崩れ
| 行 | 種別 | 詳細 |
|---|---|---|
| | 列数不一致 | カンマ混入の未引用 |
| | 引用符の対応崩れ | 引用符欠落 |
## 5. 修正手順
1. <文字コード変換 / BOM除去 / 改行変換 のコマンド>
2. <該当セルの個別修正方法>
3. <再エクスポート手順>
## 6. 修正後の再検証チェックリスト
- [ ] 文字コードがモール要件と一致
- [ ] 改行コードがモール要件と一致
- [ ] 範囲外文字なし
- [ ] 先頭0が必要な列が保持されている
- [ ] 列数が全行で一致
- [ ] バックアップを取得済み
品質ゲート
- モール要件(楽天=SJIS/CRLF、Amazon=UTF-8/TAB、Yahoo=UTF-8/CRLF)を最初に確認している
- Excelで開いて保存していないか必ず確認している
- 機種依存文字の検出が①〜⑳・㈱・㈲・㍑等を網羅
- 先頭0落ち・指数表記・日付化のチェックを含んでいる
- カンマ・引用符・改行のエスケープ崩れを行数・列数の不一致から検出
- 修正手順がコマンドレベルで具体的
- バックアップ取得の指示を含んでいる
エッジケース
- CP932とShift_JISの違い → CP932(Microsoft版)の方が含む文字が多い(NEC特殊文字・IBM拡張等)。モールが「Shift_JIS」と書いていてもCP932受入のケースあり
- UTF-8 BOMが必要 or 不要なモール差 → Shopifyは推奨、Excelで開く前提ならBOM付きが便利、システム連携では無BOM
- Mac で作成したCSVのCR-only改行 → 古いMac Classicの遺物。LFに統一
- Windowsでメモ帳保存 → 知らず知らずにUTF-8 BOMが付く
- Numbers/Googleスプレッドシートで開いた → エンコード変換のリスクは Excel と同等以上
注意事項
- CSV編集は原則テキストエディタ(VSCode/Sublime Text/秀丸等)または専用ツール(Excelなら Power Query で型指定インポート)
- Excelで開く前に必ずバックアップを取得
- 大量データ(10万行超)では一部ツールが動作不能、
iconv等のCLIを使う - 文字コードの最終判定は実際に該当モールにテストアップロードで確認
references/ 一覧
references/encoding-detection.md— 文字コード自動判定の詳細references/sjis-out-of-range.md— Shift_JIS範囲外文字一覧references/excel-traps.md— Excel保存時の破壊パターンreferences/delimiter-quote-issues.md— 区切り・引用符・改行のエスケープreferences/examples.md— モール別の実例
参考公式情報源
- 楽天RMS「商品データの一括登録」「CSVファイルの仕様」
- Amazon Seller Central「フラットファイルの仕様」「インベントリファイル」
- Yahoo!ショッピング「商品データ仕様」
- Shopify「商品CSVファイルのフォーマット」
- ネクストエンジン/クロスモール公式ヘルプ
ライセンス: MIT
詳細情報
- 作者
- 株式会社ALSEL
- ライセンス
- MIT
- 最終更新
- 2026/5/13