задача 9.1 проблема с кодировкой при записи в xml

[А] Александр Мастяев, 25 ноября 2018, 16:54 , 2 подписчика

каждая текущая (последняя) запись в xml файл отображается корректно. А вот все предыдущие - становятся нечитаемыми. Все файлы сохраняю при создании в UTF-8, нужные процедуры в начале программы прописал. Ваше решение этой задачи скачал, запустил, всё работает корректно. У себя не смог найти где ошибся...

if (Gem.win_platform?)
  Encoding.default_external = Encoding.find(Encoding.locale_charmap)
  Encoding.default_internal = __ENCODING__

  [STDIN, STDOUT].each do |io|
    io.set_encoding(Encoding.default_external, Encoding.default_internal)
  end
end

require "date"
require "rexml/document"

puts "в этом сундуке хранятся желания."
puts "Чего бы Вы хотели?"
wish_text = STDIN.gets.chomp

puts "До какого числа хотите осуществить это желание? \n Введите в формате ДД.ММ.ГГГГ"

wish_date = STDIN.gets.chomp
wish_date = Date.parse(wish_date)

current_path = File.dirname(__FILE__)

file_name = current_path + "/wishes.xml"
file = File.new(file_name)
 doc = REXML::Document.new(file)
file.close

wishes = doc.elements.find("wishes").first

wish = doc.root.add_element('wish', {
  'date' => wish_date.to_s
})
wish.text = wish_text

file = File.new(file_name, "w:UTF-8")
doc.write(file, 2)
file.close
puts "Запись сохранена"

ниже записи в xml:

<?xml version='1.0' encoding='UTF-8'?> 
<wishes>
  <wish date='2018-12-31'>
     тХитХЬтХитХб тХитХСтХитХЫтХд╨СтХд╨ЯтХд╨ЧтХитХХтХд╨ТтХд╨Ь 
  </wish>
  <wish date='2001-01-01'>
     ╨╜╨░╨╣╤В╨╕ ╨▓╨╕╨╜╨░╨▓╨░╤В╤Л╤Е 
  </wish>
  <wish date='2018-11-26'>
    разобраться с кодировкой
  </wish>
</wishes>

Обсуждение (2)


Michael Butlitsky Учитель

[M]

Похоже, что вы читаете файл не как utf вот тут:

file = File.new(file_name)

Открывайте его в режиме тоже UTF перед передачей в парсер (ключ по-моему "r:UTF-8")


Александр Мастяев

[А]

ага, оно. всё заработало. спасибо