Ruby 1.9 + Net :: FTP => Кодировка :: UndefinedConversionError - PullRequest
1 голос
/ 28 марта 2012

Я обновил Ruby 1.8.7 до 1.9.2 (и Rails 3.2.2), и проблема в том, что Net :: FTP # gettextfile выдает Encoding :: UndefinedConversionError

Я пытаюсьЗагрузите XML-файл, который закодирован как utf-8.Загрузка прекрасно работает, если я использую getbinaryfile, но я хотел бы понять, почему gettextfile не работает.

# -*- encoding : utf-8 -*-

# working
ftp = Net::FTP.open(host,user,password)
ftp.passive = true
ftp.getbinaryfile("some.xml","tmp/some.xml")

# not working
ftp = Net::FTP.open(host,user,password)
ftp.passive = true
# raises Encoding::UndefinedConversionError: "\xFF" from ASCII-8BIT to UTF-8
ftp.gettextfile("some.xml","tmp/some.xml") 

Я знаю, что могу передать внешнюю и внутреннюю кодировку, если использовать File.open следующим образом:

File.open("some.xml", "r:ASCI-8BIT:UTF-8")

, но не могу найти такую ​​опцию для Net :: FTP.

Я также пробовал блочную версию gettextfile, но она не работает и дает то же самоесообщение об ошибке.

File.open("some.xml", "w:ASCII-8BIT:UTF-8") do |file|
  ftp.gettextfile("some.xml") { |line| file.write line }
end

Кто-нибудь знает, что здесь не так?

1 Ответ

3 голосов
/ 03 мая 2012

Используйте ftp.getbinaryfile вместо ftp.gettextfile, тогда он снова заработает.:)

...