【问题标题】:How to convert a string to UTF8 in Ruby如何在 Ruby 中将字符串转换为 UTF8
【发布时间】:2013-06-06 00:30:17
【问题描述】:

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

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

我有在网页上呈现并以这种方式打印的项目:

Développement

str.encoding 返回UTF-8,所以force_encoding('UTF-8') 没有帮助。如何将其转换为可读的 UTF-8?

【问题讨论】:

  • Hpricot 不再维护,考虑使用 Nokogiri。另外,您可能应该提到原始网页的编码是什么。

标签: ruby file encoding utf-8 dump


【解决方案1】:

您的字符串似乎编码错误:

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

【讨论】:

  • 它适用于大多数情况。但有时:U+201C from UTF-8 to ISO-8859-1 in CIDEM / ACC1Ó U+20AC from UTF-8 to ISO-8859-1 in Citi’s Sustainable Development Investments 它没有。还有一些名称已转换但错误,我无法使用incomplete multibyte character 错误消息将其播种到数据库中
  • 对不起,这并不是一个修复。在将字符串读入应用程序时,您应该通过设置/检测正确的编码来解决问题。
  • 还可以选择使用Encoding::UTF_8 而不是为"utf-8" 字符串文字(或任何其他编码字符串)使用更多内存。
【解决方案2】:

似乎您的字符串认为它是 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
【解决方案3】:

ruby 1.9: invalid byte sequence in UTF-8”描述了另一种用更少代码的好方法:

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

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 2011-10-19
    • 2018-12-08
    • 2016-09-04
    • 2011-01-21
    • 2014-01-29
    • 2012-07-17
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多