0

Django/Python で特殊文字を正しく処理する方法を理解しようとしています。私は自分の views.py と models.py に次のエンコーディング文字列を追加しました:

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

ただし、注文書名を「TestÄÜÖ」に設定して次のコマンドを呼び出すと、クラッシュします。

messages.add_message(request, messages.INFO, 'The purchase order "%s" has been successfully added to project "%s".' % (purchase_order, project.name))

スローされるエラーは次のとおりです。

File "..accounting/views.py", line 1100, in post_logic
    messages.add_message(request, messages.INFO, 'The purchase order "%s" has been successfully added to project "%s".' % (purchase_order, project.name))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 20: ordinal not in range(128)

PurchaseOrder モデルは次のようになります。

class PurchaseOrder(models.Model):
    """
    purchase order assigned to a project
    """

    number = models.CharField(max_length=200)
    name = models.CharField(max_length=200, null=True, blank=True, default="")

    def __unicode__(self):
        return u'%s - %s' % (self.name, self.number)

uメッセージ文字列の前に追加すると、問題は発生しません。

messages.add_message(request, messages.INFO, u'The purchase order "%s" has been successfully added to project "%s".' % (purchase_order, project.name))

しかし、ドキュメントによると、Django 1.5 (私は 1.5 を使用しています) では、通常の文字列は Unicode 文字列である必要があり、u.

したがって、ドキュメントで必要ないとされている場合、すべての add_message 呼び出しに を追加したくありませんu。誰もがこのエンコーディングのトピックに光を当てることができますか?

4

1 に答える 1

2

from __future__ import unicode_literalsPython2 の文字列を Python3 の Unicode 文字列のように動作させる を見逃しました。

于 2013-06-11T17:02:27.790 に答える