しごと自動化レシピ

WORK RECIPE Python

PythonでCP932のテキストをUTF-8の別ファイルへ変換する

古いWindowsシステムの出力を、UTF-8の作業用テキストへ変換します。文字コードを自動推定せず、提供元に確認したCP932を厳密に読み、変換できない文字はエラーとして止めます。

掲載コード実行確認

確認日時: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を参照できます。

できあがるもの

UTF-8の別ファイルに同じ本文が保存される想定。入力を無視して文字を落とす変換は行わない。確認環境と範囲は本記事の実行確認欄を参照してください。

始める前に

  • Python 3.11以降の実行環境。標準ライブラリだけを使い、追加パッケージや外部APIは不要。python --versionで起動を確認する。
  • 新しいローカル検証フォルダに架空の入力だけを置く。本番の共有フォルダや同期フォルダで実行しない。
入力例

cp932.txtの本文は商品名:鉛筆と改行。エディタでCP932として保存する。元データが本当にCP932であることを確認する。

手順

  1. 検証フォルダを作り、cp932.txtだけを置く。エディタの保存形式がShift_JISという表示の場合も、今回の文字がCP932で表現可能かを確認する。utf8.txtが存在しない状態で始める。
  2. 同じ検証フォルダへrecipe.pyをUTF-8で保存し、次のコードをコピーする。入力名が合うか確認し、出力ファイルが必要な手順では未作成の名前を使う。 ```python from pathlib import Path source = Path('cp932.txt') text = source.read_bytes().decode('cp932', errors='strict') with Path('utf8.txt').open('x', encoding='utf-8', newline='') as output: output.write(text) print('converted characters:', len(text)) ```
  3. ターミナルをその検証フォルダで開き、python recipe.pyを実行する。入力は読み取り専用で扱う。エラー時は元データを編集せず、表示されたファイル名や入力形式を確認して停止する。
  4. 生成されたutf8.txtをUTF-8指定で開き、商品名:鉛筆と読めるかを確認する。元ファイルの更新日時やバイト列が変わっていないことも確かめる。再実行でFileExistsErrorになるのは上書きを防ぐための動作なので、新しい出力名にして試す。

期待結果と照合する

UTF-8の別ファイルに同じ本文が保存される想定。入力を無視して文字を落とす変換は行わない。確認環境と範囲は本記事の実行確認欄を参照してください。

まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。

うまくいかないとき

  • errors='ignore'や'replace'へ変えて処理を通すと文字の欠落を見落とす。失敗時は提供元の文字コードを調べる。
  • 見た目が正しくても元の文字コードを断定できない場合がある。自動推定の代わりに仕様を確認する。

止める・元に戻す

生成したutf8.txtと検証用recipe.pyだけを削除する。cp932.txtは読み取りのみなので原文が保持される。

公式資料・対応範囲

参照日:2026-10-17。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。

同じツールで試す

Pythonの記事一覧へ →