Процесс кодирования:
Я реализовал собственный обработчик ошибок utf8_hex_replace, который преобразует символы, которые не могут быть закодированы в указанной кодировке, в их шестнадцатеричное представление UTF-8. Это прекрасно работает при кодировании строки типа «Hello, 世界» в байтовую строку ASCII, а символы, отличные от ASCII, заменяются соответствующими шестнадцатеричными значениями UTF-8.
Вот код, который у меня сейчас есть:
Код: Выделить всё
import codecs
def utf8_hex_replace(exception):
if isinstance(exception, UnicodeEncodeError):
replacement = f"[{exception.object[exception.start].encode('UTF-8').hex(' ').upper()}]"
next_pos = exception.start + 1
return replacement, next_pos
else:
raise exception # Re-raise if it's another type of error
codecs.register_error('utf8hexreplace', utf8_hex_replace)
text = 'Hello, 世界'
encoded_utf8hexreplace = text.encode('ASCII', errors='utf8hexreplace')
print(encoded_utf8hexreplace)
Код: Выделить всё
b'Hello, [E4 B8 96][E7 95 8C]'
Могу ли я расширить эту функцию utf8_hex_replace для обработки декодирования? Я хотел бы декодировать строку байтов b'Hello, [E4 B8 96][E7 95 8C]' обратно в исходную строку 'Hello, 世界'. В частности, я хочу добавить ветвь elif в utf8_hex_replace, которая может перехватывать UnicodeDecodeError и декодировать значения в шестнадцатеричной кодировке обратно в их исходные символы.
Возможно ли это при нынешнем подходе или есть ли лучший способ справиться с кодированием и декодированием в этом случае?
Будем очень признательны за любые рекомендации или примеры!
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python