web-dev-qa-db-ja.com

Rubyで文字列をUTF8に変換する方法

Hpricotを使用するクローラーを書いています。いくつかのウェブページから文字列のリストをダウンロードし、それをファイルに書き込もうとします。エンコードに問題があります:

_"\xC3" from ASCII-8BIT to UTF-8
_

Webページにレンダリングされ、この方法で印刷されるアイテムがあります。

_Développement
_

_str.encoding_は_UTF-8_を返すため、force_encoding('UTF-8')は役に立ちません。これを読みやすいUTF-8に変換するにはどうすればよいですか?

50
ciembor

あなたの文字列は間違った方法でエンコードされているようです:

"Développement".encode("iso-8859-1").force_encoding("utf-8")
#=> "Développement"
57
Stefan

文字列はUTF-8であると考えているようですが、実際には、おそらくISO-8859-1のようなものです。

最初に正しいエンコードを定義(強制)してから、UTF-8に変換します。

あなたの例では:

puts "Développement".encode('iso-8859-1').encode('utf-8')

別の方法は次のとおりです。

puts "\xC3".force_encoding('iso-8859-1').encode('utf-8') #-> Ã

Ãは意味をなさないので、別のエンコーディングを試してください。

47
knut

" Ruby 1.9:UTF-8の無効なバイトシーケンス "は、より少ないコードで別の優れたアプローチを説明しました。

file_contents.encode!('UTF-16', 'UTF-8')
4
kaleb4eg