如何在Ruby中将字符串转换为UTF8

65

我正在编写一个使用Hpricot的爬虫。它从某个网页下载字符串列表,然后我尝试将其写入文件。但是编码出现了问题:

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

我有一些物品,它们在网页上被呈现并以这种方式打印:

Développement

str.encoding返回UTF-8,因此force_encoding('UTF-8')无法帮助。我该如何将其转换为可读的UTF-8?


3
Hpricot已经不再维护,建议使用Nokogiri。另外,您可能需要提及原始网页的编码格式。 - Andrew Marshall
3个回答

72

你的字符串似乎被以错误的方式进行了编码:

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

1
它对大多数情况都有效。但有时会出现以下错误:U+201C 从 UTF-8 转换为 CIDEM / ACC1Ó 中的 ISO-8859-1U+20AC 从 UTF-8 转换为 Citi’s Sustainable Development Investments 中的 ISO-8859-1 ,同时一些名称被转换但是不正确,并且在尝试将其放入数据库时会出现“不完整的多字节字符”错误消息。 - ciembor
2
抱歉,这不是为了修复问题。您应该通过在将字符串读入您的应用程序时设置/检测正确的编码来解决问题。 - Stefan
2
还有一种选择,就是使用Encoding::UTF_8代替为了"utf-8"字符串字面量(或任何其他编码字符串)而使用更多内存的选项。 - Todd

61

看起来您的字符串认为它是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') #-> Ã

如果Ã没有意义,那么尝试另一种编码方式。


适用于使用Wicked PDF gem创建的PDF文件。 - Lucas Andrade

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接