確認日時:2026-10-17T07:36:11.573547+00:00
確認環境:{"os": "Windows", "os_release": "11", "python": "3.14.2", "launch_flags": ["-I", "-X", "utf8"]}
確認した範囲
- 記事の入力例と期待結果を照合
- 元入力のバイト列が不変
未確認・対象外
- 実業務データ
- 他OS・他Python版
実機での処理結果の確認と、記事の全画面操作の確認は別です。実行確認の記録(JSON)で確認結果と原稿のSHA-256を参照できます。
できあがるもの
変換候補が3行表示され、元データへの保存はしない。1・2行目の照合候補が衝突する想定。確認環境と範囲は本記事の実行確認欄を参照してください。
始める前に
- Python 3.11以降の実行環境。標準ライブラリだけを使い、追加パッケージや外部APIは不要。python --versionで起動を確認する。
- 新しいローカル検証フォルダに架空の入力だけを置く。本番の共有フォルダや同期フォルダで実行しない。
入力例
keys.txtの3行をABC123、ABC123、カタカナとし、UTF-8で保存する。いずれも架空の検証用コード。
手順
- 新しい検証フォルダへkeys.txtを作る。正規化形式はNFKCとし、文字の見た目だけでなく意味上の区別が失われる可能性がある処理として、まず候補表示だけに限定する。
- 同じ検証フォルダへrecipe.pyをUTF-8で保存し、次のコードをコピーする。入力名が合うか確認し、出力ファイルが必要な手順では未作成の名前を使う。 ```python from pathlib import Path import unicodedata seen = {} for number, original in enumerate(Path('keys.txt').read_text(encoding='utf-8-sig').splitlines(), 1): normalized = unicodedata.normalize('NFKC', original) previous = seen.get(normalized) label = 'COLLISION' if previous is not None else 'FIRST' print(number, repr(original), '=>', repr(normalized), label) if previous is None: seen[normalized] = number ```
- ターミナルをその検証フォルダで開き、python recipe.pyを実行する。入力は読み取り専用で扱う。エラー時は元データを編集せず、表示されたファイル名や入力形式を確認して停止する。
- 1行目と2行目の正規化後がどちらもABC123になり、2行目がCOLLISIONになるか確認する。3行目はカタカナになる想定。半角カナや互換文字の統合を業務で許容できるかを担当者と決めてから書き戻しを検討する。
期待結果と照合する
変換候補が3行表示され、元データへの保存はしない。1・2行目の照合候補が衝突する想定。確認環境と範囲は本記事の実行確認欄を参照してください。
まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。
うまくいかないとき
- NFKCは全角英数字だけの変換ではない。丸数字などの互換文字も変わるため、元の値を保持する。
- 正規化後に一致しても同一人物や同一商品と断定しない。自動削除・統合は別判断にする。
止める・元に戻す
プログラムを終了する。表示だけのためファイルは変更されない。入力のkeys.txtから元の文字列を再確認できる。
公式資料・対応範囲
参照日:2026-10-17。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。