5

私は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の問題のようですが、ここや他の場所で見つかったさまざまな方法をすでに試した後、私はそれに対処できません。コンソールにロシア語の文字を表示することは可能ですか?私はWindows7(英語)でpython(xy)を使用しているので、IDEはspyder2です。pyexiv2を追加したデフォルトのインストールです。TIA!

4

2 に答える 2

4

バイトはUTF-16です。

Python 3の場合:

>>> 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]
>>> bytes(b).decode("utf-16")
'Милой Мамуле от Майи, 11 января 1944.\x00'

Python 2の場合:

>>> 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]
>>> "".join(chr(c) for c in b).decode("utf-16")
u'\u041c\u0438\u043b\u043e\u0439 \u041c\u0430\u043c\u0443\u043b\u0435 \u043e\u04
42 \u041c\u0430\u0439\u0438, 11 \u044f\u043d\u0432\u0430\u0440\u044f 1944.\x00'
于 2012-07-19T18:44:41.710 に答える
1

title.human_valueデータはUTF-8にあり、タイトルの生のUTF-16バイトからすでにデコードされていると思います。

Pythonシェルでは、OSXのターミナルウィンドウで実行します。

>>> # this should be the same as your title.human_value:
>>> print ''.join( chr(x) for x in [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])

Милой Мамуле от Майи, 11 января 1944.

お使いのコンソールはキリル文字をサポートしていない可能性があります。コマンドプロンプトでフォントを「LucidaConsole」に設定してみてください。最新のベクターフォントは、cmdがデフォルトで使用している過去のビットマップフォントよりも正しくサポートされている可能性があります。

于 2012-07-21T17:51:22.010 に答える