Iconv и Kconv на Ruby (1.9.2) - PullRequest
       21

Iconv и Kconv на Ruby (1.9.2)

3 голосов
/ 26 июня 2011

Я знаю, что Iconv используется для преобразования кодировки строк. Из моего понимания Kconv предназначен для той же цели (я не прав?).

Мой вопрос: в чем разница между ними и что я должен использовать для преобразования кодов.

кстати нашел некоторую информацию, что Iconv устареет с версии 1.9.3.

1 Ответ

5 голосов
/ 27 июня 2011

Как говорит https://stackoverflow.com/users/23649/jtbandes, похоже, Kconv похоже на Iconv, но специализировано для кандзи («логические китайские иероглифы, которые используются в современной японской системе письма наряду с хирагана» http://en.wikipedia.org/wiki/Kanji). Если вы не работаете над чем-то конкретно японским, я думаю, вам не нужно Kconv.

Если вы используете Ruby 1.9, вы можете использовать встроенную поддержку кодирования большую часть временивместо Iconv. Я часами пытался понять, что я делал, пока не прочитал это:

http://www.joelonsoftware.com/articles/Unicode.html

Тогда вы можете начать использовать такие вещи, как

String#encode           # Ruby 1.9
String#encode!          # Ruby 1.9
String#force_encoding   # Ruby 1.9

с уверенностью. Если у вас есть более сложные потребности, прочитайте http://blog.grayproductions.net/categories/character_encodings

ОБНОВЛЕНО Благодаря JohnZ в комментариях

Iconv все еще полезно вRuby 1.9, потому что он может транслитерировать символов (что не может сделать String#encode и др.) Вот пример того, как расширить String с помощью функции, транслитерирующей в UTF-8:

require 'iconv'
class ::String
  # Return a new String that has been transliterated into UTF-8
  # Should work in Ruby 1.8 and Ruby 1.9 thanks to http://po-ru.com/diary/fixing-invalid-utf-8-in-ruby-revisited/
  def as_utf8(from_encoding = 'UTF-8')
    ::Iconv.conv('UTF-8//TRANSLIT', from_encoding, self + ' ')[0..-2]
  end
end

"foo".as_utf8 #=> "foo"
"foo".as_utf8('ISO-8859-1') #=> "foo"

Спасибо JohnZ!

...