ゆるテックノート

文字コードとエンコーディングの基礎

「文字化けした!」というときは、文字コードとエンコーディングを整理すると原因が見えてきます。ここではUTF-8/UTF-16/BOMの違いと、CSVなどでハマりやすいポイントをコンパクトにまとめます。

まず押さえるポイント 🌐

文字コードは「文字→数値」の対応表、エンコーディングは「数値→バイト列」の詰め方です。

文字コードとエンコーディング

  • UTF-8/UTF-16はUnicodeをバイト列にする方法(可変長の詰め方)が異なる。
  • UTF-8はASCII互換で、英数字は1バイトのまま。多言語混在でも扱いやすくWebの標準。
  • UTF-16は2バイト(サロゲートペアで4バイト)。UTF-8よりサイズが大きくなるケースが多い。

BOM (Byte Order Mark)

  • UTF-8のBOMは0xEF 0xBB 0xBF。なくてもよいが、一部ツールはBOMありを前提にすることがある。
  • UTF-16ではエンディアン(Big/Little)を示すためBOMが実質必須。
  • シェルスクリプトや設定ファイルでBOMがあると誤動作することがあるので注意。

文字化けの典型パターン 🔄

「保存したのと読む側のエンコーディングがズレる」と文字化けします。

よくある原因

  • 保存はUTF-8だが、読み手がSJIS/CP932前提で開く(Excelの既定設定など)。
  • BOM付きUTF-8を想定していないツールでBOMをデータ扱いしてしまう。
  • HTTPレスポンスでContent-Type charsetが誤っている(例: Shift_JISと宣言してUTF-8を返す)。

対処のコツ

  • 保存も読み込みもUTF-8で揃える(BOMなしが無難)。
  • どうしてもSJIS系が必要な場合は明示して変換し、読み手の設定も案内する。
  • HTTPならContent-Typeとcharsetを正しく付ける。HTMLならを入れる。

CSVでハマりやすいところ 📄

CSVはツールごとの既定エンコーディングがバラバラです。

エンコーディングの落とし穴

  • Excelの既定は環境依存(日本語版はCP932が多い)。UTF-8 CSVを開くと文字化けすることがある。
  • 最近のExcelはBOM付きUTF-8を自動判定するが、BOMなしは判定されないことが多い。
  • UNIX系ツールやデータ処理基盤はUTF-8前提が多い。BOMなしが扱いやすい。

おすすめの運用

  • 内部処理はUTF-8(BOMなし)を基本にする。
  • Excel利用者向けに配布する場合はBOM付きUTF-8を用意するか、開き方(データ取り込み)を明記する。
  • ファイルにcharsetを含められないため、添付する説明やAPIドキュメントで明示する。