Rails Encoding::UndefinedConversionError エラーの原因と対策
エラーの概要
"\xE3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
バイト列 "\xE3" を ASCII-8BIT から UTF-8 に変換しようとして失敗したエラー
エンコーディング変換の失敗 を示している
エンコーディングとは?
エンコーディング: 文字をバイト列に変換する方式
文字コード: 各文字に対応する数値を定めたもの
ASCII: A → 0x41
UTF-8: あ → \xE3\x81\x82
Shift_JIS: あ → \x82\xA0
ASCII-8BIT とは?
Ruby における ASCII-8BIT は、エンコーディング情報が不明なバイト列を示す
バイナリデータ や未加工の外部データを保持する際に使われる
文字列として処理しようとするとエンコーディングエラーが発生することがある
エラーの原因
"\xE3" は UTF-8 の マルチバイト文字 の一部
単独では有効な文字として解釈できない
ASCII-8BIT として認識されているデータを UTF-8 に変換しようとしてエラー発生
主な発生パターン
ファイルや API のレスポンスを読み込んだ際
File.read("file.txt") → デフォルトでは ASCII-8BIT
Net::HTTP.get → ASCII-8BIT で取得される
バイナリデータを文字列として扱おうとした場合
エンコーディング情報が欠落している場合