У меня есть этот класс:рубин строка с нулевым байтом
class CountedOctet
attr_reader :length, :data
def initialize
@length = nil
@data = ""
end
def parsefile(f)
@length, = f.read(4).unpack("N")
@data, = f.read(@length).unpack("a#{@length}")
end
end
Это портирована из https://github.com/rvazarkar/KrbCredExport (который находится в Python) для Ruby.
Все работает нормально, файлы считываются, но если я получаю доступ к данным, он отключается. Длина его равна 1163 (это правильно), но в позиции 152 байтом строки является 0. Это, похоже, завершает строку. Позиция 153 верна, поэтому чтение и распаковка, похоже, сработали правильно. Есть ли способ остановить Ruby от завершения строки в нулевом байте?
Сценарий python работает с одним и тем же файлом, поэтому он не должен быть поврежденным/неправильным файлом.
какой рубин версия вы используете? – tompave
@tompave Я использую 1.9.3 – Thanathan
Откуда у вас эта строка? Строки utf-8 никогда не имеют нулевого байта посередине. –