2010年3月5日金曜日

rubyでASCII-8BIT~のエラーがでる

どうも、俺@仕事モヤモヤ中です。

rubyでWEBアプリを作っている(僕の環境の場合はUTF-8のアプリ)と
incompatible character encodings: ASCII-8BIT and UTF-8
とか
"\\xE3" from ASCII-8BIT to UTF-8...
Encoding::UndefinedConversionError
みたいなエラーが大量発生して泣きそうになっていました。

ログの通り、文字コードに関するエラーなのですが、だいたい
String.force_encoding("UTF-8")
で回避できます。

特に僕の場合は、sqlite3を使っていたのですが、
ruby-sqlite3モジュールでは、取得データを全てASCII-8BITで保持する実装になっているようで、
Rubyで遊ぶよ Rubyのsqlite3-rubyは必ず文字コードASCII-8BITとして返す
ASCIIなバイト文字列をUTF-8にする際におかしなコードに引っかかっちゃってる系でエラーが出るようです。

ruby-sqlite3の場合は、取得したデータをことごとく .force_encoding("UTF-8")すれば何とかなります。


ちなみに、rubyで文字コード対策としてマジックコメントというものがあります。
#!/usr/local/bin/ruby
# -*- coding: utf-8 -*-
とすれば、文字コードを判別して出力してくれます。


以上どえぇぇぇぇす。

0 件のコメント: