我正在从远程站点提取文本,并尝试将其加载到Ruby1.9/Rails3应用程序中,该应用程序默认使用utf-8。
下面是一些令人不快的文本示例:
Cancer Res; 71(3); 1-11. ©2011 AACR.\n
展开的版权代码如下所示:
Cancer Res; 71(3); 1-11. \xC2\xA92011 AACR.\n
Ruby告诉我字符串被编码为ASCII-8BIT,输入到我的Rails应用程序中会得到这样的结果:
incompatible character encodings: ASCII-8BIT and UTF-8
我可以使用这个正则表达式剥离版权代码。
str.gsub(/[\x00-\x7F]/n,'?')
来生产这个
Cancer Res; 71(3); 1-11. ??2011 AACR.\n
但是,我怎样才能得到一个版权符号(和其他各种符号,如希腊字母),转换成到相同的符号在UTF8?当然这是可能的.
我看到了使用force_encoding的参考,但这不起作用:
str.force_encoding('utf-8').encode
我知道有很多其他人也有类似的问题,但我还没有看到一个有效的解决方案。
发布于 2011-02-02 22:45:32
这对我来说很有效:
#encoding: ASCII-8BIT
str = "\xC2\xA92011 AACR"
p str, str.encoding
#=> "\xC2\xA92011 AACR"
#=> #<Encoding:ASCII-8BIT>
str.force_encoding('UTF-8')
p str, str.encoding
#=> "©2011 AACR"
#=> #<Encoding:UTF-8>
发布于 2012-09-25 23:58:09
有两种可能性:
Ruby 8格式的输入数据已经是-8了,只是
例如,"\xC2\xA9".force_encoding('ASCII-8BIT')将重新创建输入数据的相关位。将演示您可以告诉"\xC2\xA9".force_encoding('ASCII-8BIT').force_encoding('UTF-8')它实际上是UTF-8,并获得所需的结果。
Ruby 8输入数据是某种其他编码,您需要将其转换为
例如,假设您的输入数据是ISO-8859-1。在该编码中,版权符号就是"\xA9“。这将生成这样一小段数据:“\xa9”Ruby (‘ISO-8859-1’),这将演示您可以让.force_encoding将其代码转换为UTF-8:"\xA9".force_encoding('ISO-8859-1').encode('UTF-8')
发布于 2011-09-21 19:26:05
我曾经使用open-uri、iconv和Hpricot抓取希腊Windows编码的页面的脚本这样做:
doc = open(DATA_URL)
doc.rewind
data = Hpricot(Iconv.conv('utf-8', "WINDOWS-1253", doc.readlines.join("\n")))
我相信那是Ruby1.8.7,不知道Ruby1.9是怎么回事
https://stackoverflow.com/questions/4867883
复制相似问题