我正在开发一款基于Rails框架的应用程序,其中需要使用来自世界各地的RSS源,但有些源链接并不是UTF-8格式。原始的链接格式我无法控制,为了在应用程序的其他部分中使用它们,这些链接需要转换为UTF-8格式。
我应该如何检测链接的编码并将其转换为UTF-8格式?
我正在开发一款基于Rails框架的应用程序,其中需要使用来自世界各地的RSS源,但有些源链接并不是UTF-8格式。原始的链接格式我无法控制,为了在应用程序的其他部分中使用它们,这些链接需要转换为UTF-8格式。
我应该如何检测链接的编码并将其转换为UTF-8格式?
Ruby 1.9
“强制”编码很容易,但它不会转换字符,只是改变编码:
str = str.force_encoding('UTF-8')
str.encoding.name # => 'UTF-8'
如果您想进行转换,请使用encode
:
begin
str.encode("UTF-8")
rescue Encoding::UndefinedConversionError
# ...
end
我一定会阅读以下文章以获取更多信息:
http://graysoftinc.com/character-encodings/ruby-19s-string
str.encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''})
str.encode(Encoding.find('UTF-8'), invalid: :replace, undef: :replace, replace: '')
str.encode(Encoding.find('UTF-8'), invalid: :replace, undef: :replace, replace: '')
。 - ShockwaveNN只有这个解决方案适用于我:
string.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
require 'iconv'
i = Iconv.new('UTF-8','LATIN1')
a_with_hat = i.iconv("\xc2")
总结:iconv宝石负责进行编码转换的所有工作。请确保已安装该宝石:
gem install iconv
现在,您需要知道您的字符串当前使用的编码方式是什么,因为Ruby 1.8将字符串视为一个字节数组(没有固有的编码方式)。例如,假设您的字符串使用的是latin1编码,并且您想将其转换为utf-8编码。
require 'iconv'
string_in_utf8_encoding = Iconv.conv("UTF8", "LATIN1", string_in_latin1_encoding)