2017-01-13 8 views
0

Я работаю над сжатием и распаковкой кода предложения пользователя. я сделал этот код:Сжатие предложения

import gzip 
sentence = input(b"Please enter a sentence ") 
varNameIn = (b"sentence") 
varNameOut = gzip.compress(varNameIn) 
print(varNameOut) 
varNameDecon = gzip.decompress(varNameOut) 
print(varNameDecon) 

Но что-то кажется неправильным. Он работает с из положить:

b'Please ввести предложение 'дп ч Ь' \ x1f \ x8b \ x08 \ x00Z \ xedxX \ x02 \ XFF + N \ XCD + I \ xcdKN \ x05 \ x00 \ xd5Nf \ x9d \ x08 \ x00 \ x00 \ x00' b'sentence «

почему это показывает b'sentence» вместо фразы пользователя, и когда он просит о предложении, почему у него есть Ь» 'вместо of Please enter ... Мне сказали, что b '' сделает предложение сжатым в будущем шаге кода. Любая помощь? Thanks

+2

Er, потому что вы определили '' varNameIn' как б «предложения» '. –

+0

@ DanielRoseman: Мое предположение: это попытка превратить значение 'предложение' в объект' bytes'. –

ответ

2

b"sentence" не превращает sentence в значение bytes. Вместо этого вам нужно encode a string to bytes. Выберите кодек, который подходит для вашего варианта использования; здесь кодирование в UTF-8, вероятно, лучше всего, как он может кодировать все Unicode, с разумным небольшим размером для западного текста:

sentence = input("Please enter a sentence ") 
varNameIn = sentence.encode('utf8') 
varNameOut = gzip.compress(varNameIn) 

Обратите внимание, что input() всегда возвращают str типа, придавая ему bytes приглашения не будет измените это.

Обратите внимание, что при распаковке данных вы все равно будете иметь объект bytes. Если вы хотите, чтобы превратить это обратно в str объект, decode from bytes to str используя ту же кодировку:

varNameDecon = gzip.decompress(varNameOut) 
print(varNameDecon.decode('utf-8')) 
+0

Спасибо, что это работает! –

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

  • Нет связанных вопросов^_^