こんにちは、Py2にはこの2つの機能がありますが、Py3では機能しません。
def encoding(text, codes):
binary = ''
f = open('bytes.bin', 'wb')
for c in text:
binary += codes[c]
f.write('%s' % binary)
print('Text in binary:', binary)
f.close()
return len(binary)
def decoding(codes, large):
f = file('bytes.bin', 'rb')
bits = f.read(large)
tmp = ''
decode_text = ''
for bit in bits:
tmp += bit
if tmp in fordecodes:
decode_text += fordecodes[tmp]
tmp = ''
f.close()
return decode_text
コンソールはこれを出力します:
Traceback (most recent call last):
File "Practica2.py", line 83, in <module>
large = encoding(text, codes)
File "Practica2.py", line 56, in encoding
f.write('%s' % binary)
TypeError: 'str' does not support the buffer interface
修正は私にとって簡単でした
使用する
f = open('bytes.bin', 'w')
の代わりに
f = open('bytes.bin', 'wb')
In python 3 'w'
は必要なものであり、'wb'
。
Python 2、裸のリテラル文字列(例:'string'
)はbytesであるのに対し、Python 3でそれらはunicode。これは、リテラル文字列をPython 3のバイトとして処理する場合は、常に明示的にそのようにマークする必要があります。
したがって、たとえば、encoding
関数の最初の数行は次のようになります。
binary = b''
f = open('bytes.bin', 'wb')
for c in text:
binary += codes[c]
f.write(b'%s' % binary)
また、他の関数には同様の処理が必要な行がいくつかあります。
Python への移植)、および バイト、文字列、Unicode セクションを参照してください。