1

(对不起,如果一个新手问题......我已经做了很多研究,老实说......)

我正在编写一些 Ruby on Rails 代码来解析 RSS/ATOM 提要。我的代码在一个讨厌的“£”符号上抛出。

在做任何其他事情之前,我一直在尝试规范化提要的描述和标题字段的方法:

descr = self.description.mb_chars.normalize(:kc)

但是,当它遇到带有“£”的字符串时,我猜测 mb_chars 遇到了问题并返回了一个常规的 Ruby String 对象。我得到错误:

undefined method `normalize' for #<String:0x5ef8490>

那么,防御性地准备这些字符串以插入数据库的最佳过程是什么?(我还需要对它们进行一堆字符串处理)

我的问题很复杂,因为我不知道我正在处理的提要的格式。例如,我对以下行有一些运气:

descr = Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv descr

但是,当它遇到“£”时,它只会截断该点之后的所有内容。

当我使用 String.inspect 函数显示“£”符号时,它显示在“\243”处。如果无法“正确”处理此符号,我很乐意将其替换为另一个值(例如“GBP”)。因此,该代码的帮助也将不胜感激。

有问题的提要是http://www.dailymail.co.uk/sport/football/index.rss

4

2 回答 2

3

我找到了一种解决方案:

为了解决这个问题,我必须为文档定义 $KCODE(编码):

require 'rubygems'
require 'active_support/all'

$KCODE = 'UTF8'

str = "test ščž"
puts str.parameterize.inspect
puts str.parameterize.to_s

=> # => test-scz

原帖:https ://rails.lighthouseapp.com/projects/8994/tickets/3504-string-parameterize-normalize-bug

于 2010-10-01T22:31:40.290 回答
1

我错过了一些非常基本的东西 - 我在猜测即将进入的提要的编码。

所以现在我正在查看 (a) HTTP 响应标头中的字符集,然后 (b) 提要本身中 XML 声明中的编码。

获得编码后,我使用 iconv 将其移动到 UTF-8。

到现在为止还挺好。

于 2009-07-10T03:14:19.357 回答