Урок 13: Чтение из файла и проблемы при выводе русского текста через метод to_s в консоль

[А] Алексей Щёголев, 21 июля 2016, 19:51 , 2 подписчика

Итак, при реализации игры и выполнении домашних заданий у меня возникли проблемы, которые я никак не мог решить. Особенность этих проблем заключалась в том ,Что скачанные примеры и программы урока работали корректно, а моё решение работать отказывалось и "неработа" сводилась к тому, что с консоль выводились не русские символы а коды символов UTF

В результате я написал проверочную программу которая и позволила мне локализовать непонятности. чем я с вами и делюсь.

текст проверочной программы:

system "cls"
file = File.new("./data.txt", "r:UTF-8")
#content = file.read
lines = file.readlines

#puts content
puts "-----------puts lines.to_s----------"
puts lines.to_s

puts "-----------for line in lines do----------"
for line in lines do
    puts line   
end

puts "-----------puts lines[0] ----------"
puts lines[0] 

puts "-----------lines[4] to the array ----------"
data_array = lines[4].split(';')
puts data_array.to_s 
puts data_array[0] + " <- Нулевой элемент массива"

puts "-----------lines[4] to the array via string ----------"
data_string = lines[4]
puts data_string + " <- Это строка"
data_array2 = data_string.split(';')
puts data_array2[0] + " <- Нулевой элемент массива"
puts data_array2.to_s

puts "----------- Массив не из файла ----------"
data_array3 = ["текст", "text"]
puts data_array3.to_s + " <- весь массив"
puts data_array3[0] + " <- нулевой элемент массива"

файл data.txt

текст на перой строке
текст на второй строке
текст на третьей строке
text is on the line four
Иванов;8-800;45;27

В итоге в консоль выводится вот это: текст консоли

Таким образом, я вижу, что фактически собака порылась в методе to_s который выводит странное в случае, если его применять к массиву. Состбенно, вопрос: не сильно пока надо, но все-таки... как бы все таки массив с русским текстом вывести в строкой в консоли?

ЗЫ В прикрепленных файлах программа и файл данных

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


Вадим Венедиктов Учитель

[В]

Чтобы вывести массив на экран, не используя метод .to_s экземпляра класса Array, можно самостоятельно перевести массив в строку, например, командой join.

puts data_array.join(',')

Попробуйте так.

А вообще, общий совет про борьбу с кодировками: если система не поддаётся, используйте латинские символы.

А чуть позже разберёмся и всё исправим.


Алексей Щёголев

[А]

Ага, спасибо, вечерком попробую.