0

重複の可能性:
python:ドイツ語のウムラウトでの作業

の画像からのexifメタデータを使用してデータベースフィールドにデータを入力しようとしていますdjango-admin。私はそれを正しくデコードします。つまりprint、ウムラウトで文字列を表示します。ただしsave()、モデルを呼び出すと、データベース(sqlite)に文字列が表示されません。ウムラウトのない文字列や、ウムラウトを含む定数文字列でも問題なく機能します。何が悪かったのかについてのヒントを私に与えるエラーや何かはありません。だから何を検索したらいいのかわからない。

私はコードの重要な部分を分離しようとしています:

モデルのsave機能:

def save(self, *args, **kwargs): 
    self.url = slugify(self.name) 
    super(Photo, self).save(*args, **kwargs)

ファイル内のsave_model関数:admin.py

def save_model(self, request, obj, form, change):
    if("original_image" in request.FILES):
        file = request.FILES["original_image"]
        if (not obj.description):
          from silbertools.get_exif import get_exif
          obj.description = get_exif(file)
        if (not obj.name):
          obj.name = unicode(file)[:-4][:100]
    obj.save()

関連するdescriptionフィールドは次のように定義されます。

description = models.TextField(blank=True)

get_exif機能:

def get_exif(fn):
    i = Image.open(fn)
    info = i._getexif()
    if info:
        for tag, value in info.items():
            decoded = TAGS.get(tag, tag)
            if (decoded == "UserComment"):
                var = value[8:].decode('latin1')
                print(u"The string is: {0}".format(var))
                return var
    return u""

このget_exif()関数は、printステートメントでわかる限りうまく機能します。save_model()の直前に説明が正しく設定されていることを確認しましたobj.save()

それでも、文字列にumlautがあり、文字列がexifメタデータから読み取られるとすぐには、データベースに表示されないため、何も役に立たないようです。説明フィールドが空白であるだけで、モデルの残りの部分が期待どおりに追加されるというエラーはありません。

誰かが私が問題にたどり着くのを助けるのに十分な情報を抽出できることを願っています。

前もって感謝します!

4

1 に答える 1

-1

モジュールの先頭にエンコーディングを追加しましたか?

# -*- coding: utf-8 -*-

test = "März"

if __name__ == "__main__":
    print test.decode('utf-8')

編集: python+umlautの簡単な検索、この回答は既に ここで提供されています

于 2013-01-05T22:24:54.910 に答える