CP932へ変換する前に、変わってしまう文字を見つける。
@csvdock/cp932-lintは、変換できない文字と注意が必要な文字を集計する、無料のJavaScript/TypeScript向けパッケージです。検出した文字とその位置、注意が必要な理由を返します。人名に使われる異体字を自動で置き換えることはありません。
文字を検査し、変換できない場合は出力を停止
| 機能 | 用途 |
|---|---|
lint() | 変換できない文字、変換後に元に戻らない文字、拡張文字、人名の異体字を検査します。出現数と入力中の位置を確認できます。 |
convert() | 文字列を検査し、エラーがなければCP932のバイト列を返します。置換を指定した場合は、適用した置換の一覧も返します。 |
createLinter() | 分割した文字列を順に検査します。チャンクの境界をまたぐ引用符やサロゲートペアにも対応します。 |
対象はCP932です。①や髙はCP932で表現できるため、変換不可と混同せず警告として扱います。𠮷は変換エラーとして報告します。
インストール
v0.1.0は公開準備中です。公開後は、次のコマンドでインストールできます。
npm install @csvdock/cp932-lintES 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の無料ツールでは、ファイルをアップロードせず、文字の問題を画面で確認できます。コードに組み込む前のサンプル確認にも使えます。
文字データと対応範囲
検索できる文字一覧は、パッケージと共通のデータを使って生成しています。パッケージには、JavaScript以外の言語でも利用できるJSON形式の文字データを同梱しています。MITライセンスに従い、商用利用・改変・再配布ができます。
入力中の文字をCP932で表せるか、変換後に元の文字へ戻せるかを確認します。取り込み先独自の文字制限、フォントによる表示の違い、氏名が同一人物を指すかどうか、各項目の値が業務上正しいかどうかは判定しません。利用条件と制限はよくある質問をご覧ください。