Ошибка кодирования при сохранении документа через грабли на рельсах - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть задача rake, которая загружает XML-документ по HTTP и записывает его в файл. Загруженный XML имеет довольно неприятную кодировку, но он кодируется как 8-битный ASCII с кодовой страницей «windows-1254» в XML.

url = URI("http://report.paragaranti.com/rasyonet_xml_fund_data.asp")
http = Net::HTTP.new url.host
http.read_timeout = 120
response = http.get url.path
response.error! unless response.instance_of? Net::HTTPOK
filename = "#{Date.today}.xml"
File.open(filename, 'w') {|f| f.write(response.body)}

Приведенный выше код работает, когда я выполняю его как простой скрипт без ошибок. Однако, когда я делаю то же самое, что и рейк, через рельсы, я получаю следующее исключение:

"\xF0" from ASCII-8BIT to UTF-8

Это должно быть как-то связано с кодировкой строки, но я не уверен, почему это происходит или почему код ведет себя по-разному в среде rails и за ее пределами.

1 Ответ

0 голосов
/ 19 ноября 2011

Мне удалось решить проблему, выполнив:

File.open(filename, 'wb') {|f| f.write(response.body)}

То есть записав файл как двоичный .Тем не менее, объяснение того, что здесь происходит, очень ценится (особенно часть о том, почему это не работает в среде рельсов ..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...