#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, хотя