Railsアプリでは、世界中のRSSフィードを使用していますが、一部のフィードにはUTF-8にないリンクが含まれています。元のフィードリンクは私の制御不能であり、アプリの他の部分で使用するには、UTF-8である必要があります。
エンコードを検出してUTF-8に変換するにはどうすればよいですか?
Railsアプリでは、世界中のRSSフィードを使用していますが、一部のフィードにはUTF-8にないリンクが含まれています。元のフィードリンクは私の制御不能であり、アプリの他の部分で使用するには、UTF-8である必要があります。
エンコードを検出してUTF-8に変換するにはどうすればよいですか?
ルビー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
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)