(对不起,如果有一个新问题......我做了很多研究,说实话......)
我正在编写一些Ruby on Rails代码来解析RSS / ATOM提要。我的代码是用一个讨厌的'£'符号。
在做其他任何事情之前,我一直在尝试规范化Feed的描述和标题字段:
descr = self.description.mb_chars.normalize(:kc)
然而,当它用“£”命中字符串时,我猜测mb_chars会遇到问题并返回一个常规的Ruby String对象。我收到错误:
undefined method `normalize' for #<String:0x5ef8490>
那么,防御性地准备这些字符串以插入数据库的最佳过程是什么? (我还需要对它们进行一堆字符串处理)
我的问题更加复杂,因为我不知道我正在处理的Feed的格式。例如,我在以下几行中运气不错:
descr = Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv descr
然而,当遇到'£'时,它只会截断那一点之后的所有内容。
当我使用String.inspect函数显示'£'符号时,它显示在'\ 243'。如果一个方法没有“正确”处理这个符号,我会很高兴用它代替另一个值(比如'GBP')。因此,对该代码的帮助也将受到赞赏。
答案 0 :(得分:3)
我找到了一个解决方案:
要修复它,我必须为文档定义$ KCODE(编码):
require 'rubygems'
require 'active_support/all'
$KCODE = 'UTF8'
str = "test ščž"
puts str.parameterize.inspect
puts str.parameterize.to_s
=&GT; # =&GT;测试SCZ
原帖:https://rails.lighthouseapp.com/projects/8994/tickets/3504-string-parameterize-normalize-bug
答案 1 :(得分:1)
我遗漏了一些非常基本的东西 - 我猜测正在进入的Feed的编码。
所以现在我正在查看(a)HTTP响应头中的字符集,然后(b)源本身的XML声明中的编码。
一旦我进行了编码,我就使用iconv将其移动到UTF-8。
到目前为止一切顺利。