2015-08-19 2 views
2

У меня есть этот класс:рубин строка с нулевым байтом

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 работает с одним и тем же файлом, поэтому он не должен быть поврежденным/неправильным файлом.

+0

какой рубин версия вы используете? – tompave

+0

@tompave Я использую 1.9.3 – Thanathan

+0

Откуда у вас эта строка? Строки utf-8 никогда не имеют нулевого байта посередине. –

ответ

0

Проблема была в том, что я использовал '' для моей строки. С "" нулевой байт был правильно интерпретирован.

Смежные вопросы