Как я могу преобразовать utf8 символов в iso8859-1 - PullRequest
1 голос
/ 29 апреля 2010

вопрос в том, что название сказать! кто подскажет как это сделать в ruby!

Ответы [ 2 ]

4 голосов
/ 29 апреля 2010

С 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]

Если вы хотите записать в файл,сеть, поток ввода-вывода или консоль, это становится еще проще.В Ruby 1.9 эти объекты помечены кодировкой, как строки, и перекодирование происходит автоматически.Просто скажите print или puts и Ruby сделает для вас транскодирование:

File.open('test.txt', 'w', encoding: 'ISO-8859-1') do |f|
  f.puts u
end
4 голосов
/ 29 апреля 2010

~ ОБНОВЛЕНИЕ ~

ruby-iconv был заменен с Ruby 1.9.3 и выше методом encode . Смотри Jörg W Mittag ответ для деталей, но вкратце:

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

Я согласен с Уиллихом Тотландтом в том, что этот тип конвертации может быть не самой умной идеей, но в любом случае: используйте ruby-iconv :)

utf8string = "èàòppè"
iso_string = Iconv.conv 'iso8859-1', 'UTF-8', utf8string 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...