Как обрабатывать кодирование и декодирование с помощью специального обработчика ошибок в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как обрабатывать кодирование и декодирование с помощью специального обработчика ошибок в Python?

Сообщение Anonymous »

Я работаю над сценарием, в котором мне нужно обрабатывать кодирование и декодирование строк, используя специальную обработку ошибок в Python. В частности, я хочу создать обработчик ошибок, который может обрабатывать исключения как кодирования, так и декодирования.
Процесс кодирования:
Я реализовал собственный обработчик ошибок 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»