tex*_*nic 5 python string unicode encoding exif
我是Python的初学者,想开始学习它.也就是说,我想在一大堆家庭照片中纠正一些EXIF信息.首先,我想正确地从JPEG文件中获取这些信息.
其中一些人用EXIF写的标题.它可以通过例如获得
import pyexiv2
metadata = pyexiv2.ImageMetadata(filename)
metadata.read()
title = metadata['Exif.Image.XPTitle']
Run Code Online (Sandbox Code Playgroud)
我到目前为止.现在出现了问题.一些标题包含西里尔字母.如果我这样做,print title.human_value
我会举个例子
`Милой Мамуле от Майи, 11 ÑÐ½Ð²Ð°Ñ€Ñ 1944.`
Run Code Online (Sandbox Code Playgroud)
同时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>
Run Code Online (Sandbox Code Playgroud)
我喜欢看的实际字符串是
????? ?????? ?? ????, 11 ?????? 1944.
Run Code Online (Sandbox Code Playgroud)
这似乎是一个unicode问题,但在尝试了已经在这里和其他地方找到的十几种不同方法后,我无法应对它.是否有可能在控制台中看到俄文字母?我在Windows 7(英语)上使用python(xy),所以我的IDE是spyder2.只是默认安装,我添加了pyexiv2.TIA!
字节为 UTF-16。
\n\n在Python 3中:
\n\n>>> b = [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]\n>>> bytes(b).decode("utf-16")\n\'\xd0\x9c\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xb9 \xd0\x9c\xd0\xb0\xd0\xbc\xd1\x83\xd0\xbb\xd0\xb5 \xd0\xbe\xd1\x82 \xd0\x9c\xd0\xb0\xd0\xb9\xd0\xb8, 11 \xd1\x8f\xd0\xbd\xd0\xb2\xd0\xb0\xd1\x80\xd1\x8f 1944.\\x00\'\n
Run Code Online (Sandbox Code Playgroud)\n\n在Python 2中:
\n\n>>> b = [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]\n>>> "".join(chr(c) for c in b).decode("utf-16")\nu\'\\u041c\\u0438\\u043b\\u043e\\u0439 \\u041c\\u0430\\u043c\\u0443\\u043b\\u0435 \\u043e\\u04\n42 \\u041c\\u0430\\u0439\\u0438, 11 \\u044f\\u043d\\u0432\\u0430\\u0440\\u044f 1944.\\x00\'\n
Run Code Online (Sandbox Code Playgroud)\n