Недавно я работал с методами Ruby chr
и ord
, и есть несколько вещей, которые я не понимаю.Попытка понять методы Ruby .chr и .ord
Мой текущий проект включает в себя преобразование отдельных символов в и из порядковых значений. Как я понимаю, если у меня есть строка с индивидуальным символом типа «A», и я вызываю ord
, я получаю ее позицию в таблице ASCII, которая равна 65. Вызов обратного, 65.chr
дает мне значение символа «A», поэтому это говорит мне, что Ruby имеет коллекцию где-то из упорядоченных значений символа, и она может использовать эту коллекцию, чтобы дать мне позицию определенного символа или персонажа в определенной позиции. Возможно, я ошибаюсь, пожалуйста, поправьте меня, если я есть.
Теперь я также понимаю, что кодировка символов по умолчанию Ruby использует UTF-8, поэтому она может работать с тысячами возможных символов. Таким образом, если я попрошу его что-то вроде этого:
'好'.ord
я получаю позицию этого символа, который 22909. Однако, если я позвоню chr
этого значения:
22909.chr
я получаю «RangeError: 22909 из диапазона. Я могу получить только char
для работы с значениями до 255, которые расширены ASCII. Так что мои вопросы:
- Почему Руби, кажется, получать значения
chr
из расширенного символа ASCII установлен, ноord
из UTF-8? - Есть ли способ сказать Ruby использовать разные кодировки, когда он использует эти методы? Например, скажите, чтобы использовать кодировку ASCII-8BIT вместо того, что она по умолчанию?
- Если можно изменить кодировку по умолчанию, есть ли способ получить общее количество символов, доступных в используемом наборе?
http://apidock.com/ruby/Integer/chr упоминает, что вы можете использовать что-то вроде '' 22909.chr (Encoding :: UTF_8) ''. Кодировка также имеет '' Encoding :: ASCII_8BIT'', если вы хотите использовать это вместо этого. –
@NabeelAmjad Вы должны опубликовать это как ответ. –
Это очень полезно, я не видел этого, и это доставляет мне долгий путь туда, куда я иду. Теперь единственное, что мне не хватает, это простой способ получить количество символов, доступных для конкретной кодировки. Например, ASCII_8BIT имеет 256 символов, UTF_8 около 1.1 миллион, ect. И да, пожалуйста, разместите его как ответ. –