Ответ 1
Ruby уже имеет метод String#each_byte
, который сглаживается до String#bytes
.
До Ruby 1.9 строки были эквивалентны байтовым массивам, т.е. символ считался одним байтом. Это прекрасно для текста ASCII и различных текстовых кодировок, таких как Win-1252 и ISO- 8859-1, но плохо с Unicode, который мы видим все чаще и чаще в Интернете. Ruby 1.9+ известен Unicode, и строки больше не считаются состоящими из байтов, но вместо этого состоят из символов, длина которых может быть несколько.
Итак, если вы пытаетесь манипулировать текстом в виде одиночных байтов, вам нужно убедиться, что ваш вход ASCII или, по крайней мере, однобайтовый набор символов. Если у вас есть многобайтовые символы, вы должны использовать String#each_char
или String.split(//)
или String.unpack
с флагом U
.
Что означает//в
String.split(//)
//
совпадает с использованием ''
. Либо указывает split
на возврат символов. Вы также можете обычно использовать chars
.