我如何将utf8字符转换为iso8859-1

时间:2010-04-29 08:19:27

标签: ruby

问题是标题说!谁能告诉我红宝石怎么做!

2 个答案:

答案 0 :(得分:4)

~UPDATE~

ruby-iconv已由encode方法从Ruby 1.9.3开始取代。有关详细信息,请参阅 Jörg W Mittag's answer,但简而言之:

utf8string = "èàòppè"
iso_string = utf8string.encode('ISO-8859-1')

我同意Williham Totlandt认为这种转换可能不是最聪明的想法,但无论如何:使用ruby-iconv:)

utf8string = "èàòppè"
iso_string = Iconv.conv 'iso8859-1', 'UTF-8', utf8string 

答案 1 :(得分:4)

使用Ruby 1.9,这一点特别容易,因为所有字符串都带有编码:

# coding: UTF-8

u = 'µ'

如您所见,字符串编码为UTF-8:

p u.encoding   # => #<Encoding:UTF-8>
p u.bytes.to_a # => [194, 181]

转码字符串非常简单:

i = u.encode('ISO-8859-1')

i现在采用ISO-8859-1编码:

p i.encoding   # => #<Encoding:ISO8859-1>
p i.bytes.to_a # => [181]

如果要写入文件,网络,IO流或控制台,它会变得更加容易。在Ruby 1.9中,这些对象使用类似字符串的编码进行标记,并且转码会自动进行。只需说printputs,Ruby就会为您进行转码:

File.open('test.txt', 'w', encoding: 'ISO-8859-1') do |f|
  f.puts u
end