63

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

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

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

Développement

str.encoding返品UTF-8されるので、役に立ちforce_encoding('UTF-8')ません。これを読み取り可能な UTF-8 に変換するにはどうすればよいですか?

4

3 に答える 3

69

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

"Développement".encode("iso-8859-1").force_encoding("utf-8")
#=> "Développement"
于 2013-06-10T12:24:08.717 に答える
58

あなたの文字列はそれが 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') #-> Ã

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

于 2013-06-10T14:33:35.340 に答える
5

ruby​​ 1.9: invalid byte sequence in UTF-8」では、コードの少ない別の優れたアプローチについて説明しています。

file_contents.encode!('UTF-16', 'UTF-8')
于 2015-01-08T13:43:01.297 に答える