2017-01-13 26 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) 

をしかし、何かが間違っているようです。文 'GNさh B' \ X1F \ x8b \ X08 \ x00Z \ xedxX \ X02 \ XFF + N \ XCD + I \ xcdKN \ X05 \ X00を入力し

b'Please:それはの入れアウトで動作します\ xd5Nf \ x9d \ X08 \ X00 \ X00 \ X00' b'sentence「は」の代わりに、ユーザーの文の、それはそれはBを持っていない理由の文章を求めていたときに」b'sentenceを示してい代わりに、「なぜ

私はb ''がコードの将来のステップで文章を圧縮すると言われました。 助けてください? ありがとう

+2

のEr:あなたは同じエンコーディングを使用して、そのバックstrオブジェクトにdecode from bytes to strをオンにする場合。 –

+0

@DanielRoseman:私の推測: 'sentence'値を' bytes'オブジェクトに変換しようとしています。 –

答えて

2

b"sentence"sentencebytesになりません。代わりにencode a string to bytesする必要があります。あなたのユースケースに合ったコーデックを選んでください。それをbytesプロンプトを与え、input()は常にstr型を返す

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

注ことはありません。ここにエンコードUTF-8、おそらくそれは西洋のテキストのための合理的な小さなサイズで、ユニコードのすべてをエンコードすることができるよう最善の方法ですそれを変えなさい。

再度データを解凍すると、まだbytesオブジェクトが残っていることに注意してください。あなたは `B「文」`と `varNameIn`を定義しているため、

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

ありがとうございます! –