私のレールアプリでは世界中のRSSフィードを扱っていますが、一部のフィードにはUTF-8以外のリンクがあります。元のフィードリンクは私のコントロール外です。アプリの他の部分でそれらを使用するには、UTF-8にする必要があります。任意のエンコーディングから文字列をUTF-8に変換する
エンコードを検出してUTF-8に変換するにはどうすればよいですか?
私のレールアプリでは世界中のRSSフィードを扱っていますが、一部のフィードにはUTF-8以外のリンクがあります。元のフィードリンクは私のコントロール外です。アプリの他の部分でそれらを使用するには、UTF-8にする必要があります。任意のエンコーディングから文字列をUTF-8に変換する
エンコードを検出してUTF-8に変換するにはどうすればよいですか?
に変換したい:
を3210str = 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 install iconv
、あなたの文字列をコードする現在でのRuby 1.8のお菓子バイトの配列として文字列としてであるかを知る必要があるたとえば、あなたの文字列だったと言いますlatin1の中に、あなただけのエンコーディングに変更しかし、それは文字を変換しません、エンコーディングは簡単で、「強制」
Ruby 1.9のUTF-8
require 'iconv'
string_in_utf8_encoding = Iconv.conv("UTF8", "LATIN1", string_in_latin1_encoding)
答えがありがとうございますが、私の場合はソースデータが矛盾していて、実際には符号化を先取りする信頼できる方法がありません –
Iconvはもう使用しないでください。 (廃止された)http://stackoverflow.com/questions/8148762/iconv-deprecation-warning-with-ruby-1-9-3 – basgys
これは、あなたが正しいエンコーディングを持っていることを確認し、無効または未定義の文字を空の文字列に置き換えるため、エラーは発生しません。
これはつまり、HTTPヘッダーまたは ` `、あなたはエンコーディングを検出するために有効なUTF-8文字列
str.encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''})
を持っていることを、あなたは文書の添付メタ情報を解析するために必要なもの、に関係なく保証しますタグ。 – deceze