3

管理サイトから sqlite データベースに新しいレコードを追加しているときに、Unicode 文字列の問題に直面しました。

class Translation(BaseModel):
  .....
  translation = models.CharField(max_length=100)

「été」などの単語を挿入しようとすると、エラーが発生します。

**UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)**

更新: トレースバックを追加: http://pastebin.com/yLYFNDGB

4

2 に答える 2

5

解決策を見つけました。実際、問題は Django や sqlite にはありませんでした。問題はunicode () メソッドにありました。

以前は次のとおりでした。

def __unicode__(self):
    return "{} ({})".format(self.translation, self.word.lang.abbr)

明らかな修正の後、問題はなくなりました。

def __unicode__(self):
    return u"{} ({})".format(self.translation, self.word.lang.abbr)
于 2012-07-10T15:22:05.263 に答える
0

éを文字列として変数に代入すると、実際にはxe9として取得されます。

Python コマンド ライン エディターに移動して、次のコードを記述した場合のように:

>>> a = u'café'
>>> a 

Enter キーを押すと、次の図のようにé文字が \xe9 に置き換えられます。

>>> u'caf\xe9'

一方、これを print ステートメントで記述すると、最初に割り当てたものが得られます。つまり、次のようになります。

>>> print a
café

したがって、この点を指摘した後、問題の解決策はutf8 エンコーディングを使用して\xe9を取り除くことです。したがって、次の方法で文字列をエンコードできます。

>>> string_for_output = yourstring-with-é.encode('utf8', 'replace')

このトピックの詳細については、このURLを参照してください。「欲求不満#3:出力の一貫性のない処理」という見出しの下で問題について説明します

お役に立てれば。

于 2012-07-10T15:06:54.810 に答える