我想了解如何与在Django/Python的特殊字符正确对待。 我已经加入到我的views.py和models.py中以下编码字符串:Django的特殊字符处理
# -*- coding: utf-8 -*-
但当下面的CMD调用与设置为“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))
但docs说,在Django 1.5(我使用的是1.5),一个正常的字符串应该是一个Unicode字符串,并且不需要u
。
所以我不想加入到我所有的ADD_MESSAGE调用一个u
,如果文档说是不需要的。 任何人都可以揭示出这个编码话题一些轻?
试一下'purchase_order.encode('utf-8')' –