【发布时间】:2012-07-19 18:20:57
【问题描述】:
我是 Python 的一个完整的初学者,并且想开始学习它。也就是说,我很想更正我拥有的一大堆家庭照片中的一些 EXIF 信息。首先,我想正确地从 JPEG 文件中获取这些信息。
其中一些有一个用 EXIF 写的标题。它可以得到例如由
import pyexiv2
metadata = pyexiv2.ImageMetadata(filename)
metadata.read()
title = metadata['Exif.Image.XPTitle']
到目前为止,我已经做到了。现在问题来了。一些标题包含西里尔字母。如果我这样做 print title.human_value 我会得到例如
`Милой Мамуле от Майи, 11 ÑÐ½Ð²Ð°Ñ€Ñ 1944.`
print title 是
<Exif.Image.XPTitle [Byte] = 28 4 56 4 59 4 62 4 57 4 32 0 28 4 48 4 60 4 67 4 59 4 53 4 32 0 62 4 66 4 32 0 28 4 48 4 57 4 56 4 44 0 32 0 49 0 49 0 32 0 79 4 61 4 50 4 48 4 64 4 79 4 32 0 49 0 57 0 52 0 52 0 46 0 0 0>
我希望看到的实际字符串是
Милой Мамуле от Майи, 11 января 1944.
这似乎是一个 unicode 问题,但是在尝试了在这里和其他地方找到的十几种不同的方法之后,我无法应对它。是否可以在控制台中看到俄语字母?我在 Windows 7(英文)上使用 python(xy),所以我的 IDE 是 spyder2。只是默认安装,我在其中添加了 pyexiv2。蒂亚!
【问题讨论】:
-
让我们弄清楚我们的数据到底是什么。
type( title.human_value )和[ord(x) for x in title.human_value]得到什么? -
@RussellBorogove:
<type 'str'>和[208, 156, 208, 184, 208, 187, 208, 190, 208, 185, 32, 208, 156, 208, 176, 208, 188, 209, 131, 208, 187, 208, 181, 32, 208, 190, 209, 130, 32, 208, 156, 208, 176, 208, 185, 208, 184, 44, 32, 49, 49, 32, 209, 143, 208, 189, 208, 178, 208, 176, 209, 128, 209, 143, 32, 49, 57, 52, 52, 46]
标签: python string unicode encoding exif