私のRailsアプリでは、世界中のRSSフィードを使用していますが、一部のフィードにはUTF-8以外のリンクがあります。元のフィードリンクは制御できません。アプリの他の部分でそれらを使用するには、UTF-8である必要があります。
エンコードを検出してUTF-8に変換するにはどうすればよいですか?
Ruby 1.9
エンコーディングの「強制」は簡単ですが、エンコーディングを変更するだけでは文字は変換されません。
str = str.force_encoding("UTF-8")
str.encoding.name # => 'UTF-8'
変換を実行する場合は、encode
を使用します。
begin
str.encode("UTF-8")
rescue Encoding::UndefinedConversionError
# ...
end
詳細については、次の投稿を必ずお読みください。
http://graysoftinc.com/character-encodings/Ruby-19s-string
これにより、正しいエンコーディングが確保され、無効または未定義の文字が空白文字列に置き換えられるため、エラーが発生しなくなります。
これにより、有効なUTF-8文字列があることが確実になります
str.encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''})
require 'iconv'
i = Iconv.new('UTF-8','LATIN1')
a_with_hat = i.iconv("\xc2")
要約:iconv gemは、エンコードの変換のすべての作業を行います。次のものでインストールされていることを確認してください。
gem install iconv
現在、文字列が現在どのエンコーディングにあるかを知る必要がありますRuby 1.8は文字列をバイトの配列として扱います(組み込みエンコーディングなし))たとえば、文字列がlatin1にあり、 utf-8に変換したかった
require 'iconv'
string_in_utf8_encoding = Iconv.conv("UTF8", "LATIN1", string_in_latin1_encoding)