CSV Dock / 開発者向けドキュメント
MITライセンス・無料v0.1.0パッケージ公開準備中

CP932へ変換する前に、変わってしまう文字を見つける。

@csvdock/cp932-lintは、変換できない文字と注意が必要な文字を集計する、無料のJavaScript/TypeScript向けパッケージです。検出した文字とその位置、注意が必要な理由を返します。人名に使われる異体字を自動で置き換えることはありません。

文字を検査し、変換できない場合は出力を停止

機能用途
lint()変換できない文字、変換後に元に戻らない文字、拡張文字、人名の異体字を検査します。出現数と入力中の位置を確認できます。
convert()文字列を検査し、エラーがなければCP932のバイト列を返します。置換を指定した場合は、適用した置換の一覧も返します。
createLinter()分割した文字列を順に検査します。チャンクの境界をまたぐ引用符やサロゲートペアにも対応します。

対象はCP932です。はCP932で表現できるため、変換不可と混同せず警告として扱います。𠮷は変換エラーとして報告します。

インストール

v0.1.0は公開準備中です。公開後は、次のコマンドでインストールできます。

npm install @csvdock/cp932-lint

ES ModulesとTypeScriptの型定義に対応します。検査と変換は実行環境内で完結し、アカウント登録やAPIキーは不要です。

CSVを検査する

import { lint } from '@csvdock/cp932-lint';

const result = lint('氏名,備考\n𠮷田,①番', { format: 'csv' });

for (const issue of [...result.errors, ...result.warnings]) {
  console.log(issue.char, issue.codePoint, issue.reason);
  console.log(issue.positions, issue.docs);
}

𠮷」は2レコード目の1列目にあり、列名は「氏名」です。検査結果のdocsには、その文字の説明ページのURLが入ります。このURLに入力データは含まれません。

行番号は、ヘッダー行を1行目としてレコード単位で数えます。引用符で囲まれたフィールド内の改行では、行番号は増えません。列番号は1から数えます。

エラーがある場合は変換を停止する

初期設定では、エラーがある場合に出力を停止します。警告でも停止するには、failOn: 'warning'を指定してください。

import { convert, ConversionError } from '@csvdock/cp932-lint';

try {
  const { bytes, applied } = convert('価格,100円', {
    to: 'CP932',
    replace: 'none', // 候補による置換をしない
    failOn: 'error',
  });
  // bytes: Uint8Array。保存やレスポンスの返却に使用できます。
} catch (error) {
  if (error instanceof ConversionError) {
    console.log(error.result.errors);
  } else {
    throw error;
  }
}

置換は初期状態で無効です。replace: 'safe'を選んだ場合も、辞書で許可された置換だけを適用して再検査します。人名異体字・外字は自動置換しません。置換とエラー処理の詳細を確認してください。

まずは手元のファイルで確認したい方へ

CSV Dockの無料ツールでは、ファイルをアップロードせず、文字の問題を画面で確認できます。コードに組み込む前のサンプル確認にも使えます。

ブラウザでCSVを確認する

文字データと対応範囲

検索できる文字一覧は、パッケージと共通のデータを使って生成しています。パッケージには、JavaScript以外の言語でも利用できるJSON形式の文字データを同梱しています。MITライセンスに従い、商用利用・改変・再配布ができます。

入力中の文字をCP932で表せるか、変換後に元の文字へ戻せるかを確認します。取り込み先独自の文字制限、フォントによる表示の違い、氏名が同一人物を指すかどうか、各項目の値が業務上正しいかどうかは判定しません。利用条件と制限はよくある質問をご覧ください。