Вопрос сюда, потому что RubyMine. Всё-таки победил русские буквы в терминале, а вот Майн - не хочет.
Описание виселицы пишет крокозябрами. Вот код:
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_relative "game.rb"
require_relative "resultprinter.rb"
require_relative "word_reader.rb"
require "unicode_utils/upcase"
current_path = File.dirname(__FILE__)
printer = ResultPrinter.new
word_reader = WordReader.new
words_file_name = current_path + "/data/words.txt"
game = Game.new(word_reader.read_from_file(words_file_name))
while game.status == 0 do
printer.print_status(game)
game.ask_next_letter
end
printer.print_status(game)
Вот код куда добавлял чтение ещё и по верхнему регистру.
class Game
def initialize(slovo)
@letters = get_letters(slovo)
@errors = 0
@status = 0
@good_letters = []
@bad_letters = []
end
def get_letters(slovo)
if (slovo == nil || slovo == "")
abort "Вы не ввели слово для игры"
end
return UnicodeUtils.upcase(slovo).split("")
end
def ask_next_letter
puts "\n Введите следующую букву"
letter = ""
while letter == "" do #пока пользователь не ввёл букву,просить её ввести
letter = STDIN.gets.encode("UTF-8").chomp
end
next_step(letter)
end
def next_step(bukva)
bukva = UnicodeUtils.upcase(bukva)
if @status == -1 ||
@status == 1
return
end
if @good_letters.include?(bukva) ||
@bad_letters.include?(bukva)
return
end
if @letters.include?(bukva)
@good_letters << bukva
if @good_letters.uniq.sort == @letters.uniq.sort
@status = 1
end
else
@bad_letters << bukva
@errors += 1
if @errors >= 7
status = -1
end
end
end
def letters
return @letters # фишка Ruby - можно не писать return на последнюю строчку. Ruby сам поймёт и подставит его.
end
def good_letters
@good_letters
end
def bad_letters
@bad_letters
end
def status
@status
end
def errors
@errors
end
end
Да, с рубимайном проблема известная. Кстати в подобных репортах всегда прилагай версии ОС и руби.
Тут можно попробовать Global Encoding сделать UTF-8 тоже, или забить на задания с кириллицей внутри рубимайна (у него свой запускатель кода, в винде он работает с русским нестабильно, рецепты из гугла иногда помогают иногда нет).