Следующий код - это то, что я начинаю тестировать для использования в игре «Texas Hold Em», над которой я работаю.Многобайтовая символьная проблема с .match?
Мой вопрос в том, почему при запуске нижеследующего кода помехи, содержащие «♥», возвращают «\ u» в его место. Я чувствую себя уверенным, что этот многобайтовый символ вызывает проблему во втором puts, я заменил ♦ на d в массиве строк, и он вернул то, что ожидал. Смотрите ниже:
Мой код:
#! /usr/bin/env ruby
# encoding: utf-8
table_cards = ["|2♥|", "|8♥|", "|6d|", "|6♣|", "|Q♠|"]
# Array of cards
player_1_face_1 = "8"
player_1_suit_1 = "♦"
# Player 1's face and suit of first card he has
player_1_face_2 = "6"
player_1_suit_2 = "♥"
# Player 1's face and suit of second card he has
test_str_1 = /(\D8\D{2})/.match(table_cards.to_s)
# EX: Searching for match between face values on (player 1's |8♦|) and the |8♥| on the table
test_str_2 = /(\D6\D{2})/.match(table_cards.to_s)
# EX: Searching for match between face values on (player 1's |6♥|) and the |6d| on the table
puts "#{test_str_1}"
puts "#{test_str_2}"
Кладет на экране:
|8\u
|6d|
- Моя цель состояла бы в том, чтобы получить первые путы вернуться: | 8 ♥ |
Я не так уж и ищу решение для этого (может быть, и не один), но более «как можно проще» объяснения того, что вызывает эту проблему и почему. Спасибо заранее за любую информацию о том, что здесь происходит и как я могу решить эту задачу.
OS? Какой терминал? – Anthony
Печать символов Юникода на экране включает в себя больше, чем ваш скрипт Ruby, имеющий правильную кодировку. Это также требует, чтобы ваша консоль использовала тот же набор кодов. Если это настроено на что-то другое, то такие вещи могут произойти. Обычно Windows использует Win1252 или ISO-8859-1, а определения символов не соответствуют вызывающему странному выводу. –
Действительно ли это связано с 'match'? Вы пробовали 'puts '♥" '? – Stefan