Я хочу записать строку в файл, используя Python. Я знаю, как это сделать, так что это не проблема. Я также хочу закодировать эту строку, как только она будет написана. Кодировка не имеет большого значения, поэтому я буду придерживаться, скажем, UTF-32. Для этого я пишу строку, снова читаю из файла, кодирую строку в байты, а затем перезаписываю в тот же файл. Я могу сделать часть кодирования, но моя проблема возникает с декодированием. Я хочу прочитать его как байты, чтобы я мог преобразовать его обратно в str
. Для этого я использую тот же принцип: чтение из файла, декодирование и запись в один и тот же файл. То, что я получаю от чтения закодированной строки, выглядит как b'\xff\xfe\x00\x001\x00\x00\x004\x00\x00\x002\x00\x00\x00'
Когда я читаю это как байты, он удваивает b
и обратную косую черту. Если я читаю это так, как строку, а затем пытаюсь декодировать, он продолжает говорить 'str' object does not have attribute decode
или что-то в этом роде. Я знаю, что не могу декодировать строку, но если я попробую с байтами, это, кажется, удваивает байты.
Вот мой код:
def readfile(filename):
f = open(filename, 'r')
s = f.read()
f.close()
return s
def readfile_b(filename):
f = open(filename, 'rb')
s = f.read()
f.close()
return s
def writefile(filename, writeobject):
f = open(filename, 'w')
f.write(writeobject)
f.close()
def encode(filename):
s = readfile(filename)
s_enc = bytes(s, 'utf-32')
writefile(filename, str(s_enc))
def decode(filename):
s_enc = readfile_b(filename)
print(s_enc)
s = str(s_enc, 'utf-32')
writefile(filename, s)
encode("Example.txt")
decode("Example.txt")
Вывод (для decode (), encode () не было ошибок):
b"b'\\xff\\xfe\\x00\\x00H\\x00\\x00\\x00e\\x00\\x00\\x00l\\x00\\x00\\x00l\\x00\\x00\\x00o\\x00\\x00\\x00'"
Traceback (most recent call last):
File "C:/bla/bla/bla/bla/Example.py", line 29, in <module>
decode("MamaAccount.txt")
File "C:/bla/bla/bla/bla/Example.py", line 26, in decode
s = str(s_enc, 'utf-32')
UnicodeDecodeError: 'utf-32-le' codec can't decode bytes in position 0-3: code point not in range(0x110000)
Любая помощь с благодарностью