кодек pyexiv2 — ‘utf-8’ не может декодировать

#python #pyexiv2

Вопрос:

Я пытаюсь прочитать/записать некоторые метаданные XMP и IPTC в изображение. Для этого я использую py3exiv2 библиотеку.

У меня проблема с некоторыми персонажами (особенно немецкими умлаутами), когда библиотека выдает исключение: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdf in position 2: invalid continuation byte

Вот мой простой пример:

 file_meta = pyexiv2.ImageMetadata(file_path)
file_meta.read()
print(file_meta["Iptc.Application2.Keywords"])
 

И полное исключение:

 Traceback (most recent call last):
  File "/Users/rjendraszak/Workspace/10_Egnyte/30_CustomDev/dpaFoto/Phase2/merge-jpeg-with-xmp-phase-2/env/lib/python3.9/site-packages/pyexiv2/metadata.py", line 211, in _get_iptc_tag
    return self._tags['iptc'][key]
KeyError: 'Iptc.Application2.Keywords'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/rjendraszak/Workspace/10_Egnyte/30_CustomDev/dpaFoto/Phase2/merge-jpeg-with-xmp-phase-2/env/lib/python3.9/site-packages/pyexiv2/metadata.py", line 246, in __getitem__
    return getattr(self, '_get_%s_tag' % family)(key)
  File "/Users/rjendraszak/Workspace/10_Egnyte/30_CustomDev/dpaFoto/Phase2/merge-jpeg-with-xmp-phase-2/env/lib/python3.9/site-packages/pyexiv2/metadata.py", line 214, in _get_iptc_tag
    tag = IptcTag._from_existing_tag(_tag)
  File "/Users/rjendraszak/Workspace/10_Egnyte/30_CustomDev/dpaFoto/Phase2/merge-jpeg-with-xmp-phase-2/env/lib/python3.9/site-packages/pyexiv2/iptc.py", line 111, in _from_existing_tag
    tag._raw_values = _tag._getRawValues()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdf in position 2: invalid continuation byte
 

У кого-нибудь уже была подобная проблема и она была решена?

Спасибо

Комментарии:

1. Это вызвано тем, что содержимое файла не является UTF8. Скорее всего, они latin1

2. Попробуйте изменить file_meta.iptc_charset свойство на latin1 . Свойство iptc_charset используется для указания набора символов тегов. Было бы лучше, если бы производитель этих изображений был изменен на использование UTF8, хотя