Django:非ASCII字符

时间:2011-01-08 17:34:44

标签: python django unicode utf-8

7 个答案:

答案 0 :(得分:37)

你的脚本开头是否有这个:

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

...

请参阅:http://www.python.org/dev/peps/pep-0263/

编辑:对于第二个问题,它是关于html编码的。把它放在你的html页面的头部(你应该把请求作为html页面发送,否则我认为你不能正确输出那个字符):

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

答案 1 :(得分:15)

在views.py

的顶部插入
# -*- coding: utf-8 -*-

在字符串

之前添加“u”
my_str = u"plus de détails"

解决!

答案 2 :(得分:8)

您需要Gabi提到的编码注释,并在字符串前使用unicode“u”符号:

return HttpResponse(u'español')

我在网上找到的解释所有ASCII / Unicode混乱的最佳页面是这样的: http://www.stereoplex.com/blog/python-unicode-and-unicodedecodeerror

享受!

答案 3 :(得分:3)

settings.py 文件中将DEFAULT_CHARSET设置为'utf-8'

答案 4 :(得分:0)

我正在努力解决与@dkgirl相同的问题,但尽管在这里建议了所有的更改,我仍然无法获得我在settings.py中定义的包含ñ的常量字符串,以显示在我呈现的页面中模板。

相反,我将我的python代码中的每个“utf-8”实例从上面的解决方案替换为“ ISO-8859-1 ”(Latin-1)。它现在工作正常。

奇怪,因为一切似乎都表明ñ是由utf-8支持的(实际上我仍在我的模板中使用utf-8)。也许这只是旧版Django版本的问题?我正在运行1.2 beta 1。

可能导致问题的其他任何想法?这是我的旧追溯:
追溯(最近的呼叫最后):
  文件“manage.py”,第4行,中     导入设置#假设在同一目录中。
  文件“C:\ dev \ xxxxx \ settings.py”,第53行     ('es',ugettext(u'Espa±ol')),
语法错误:( unicode错误)'utf8'编解码器无法解码位置0中的字节0xf1: 意外的数据结束

答案 5 :(得分:0)

参考:https://docs.djangoproject.com/en/1.8/ref/unicode/

“如果您的代码仅使用ASCII数据,则可以安全地使用普通字符串,随意传递它们,因为ASCII是UTF-8的子集。

不要误以为如果你的DEFAULT_CHARSET设置设置为'utf-8'以外的其他设置,你可以在你的字节串中使用其他编码! DEFAULT_CHARSET仅适用于作为模板呈现(和电子邮件)结果生成的字符串。 Django将始终假定内部字节串的UTF-8编码。原因是DEFAULT_CHARSET设置实际上并不在您的控制之下(如果您是应用程序开发人员)。它由安装和使用您的应用程序的人员控制 - 如果该人选择不同的设置,您的代码仍必须继续工作。因此,它不能依赖于那种设置。

在大多数情况下,当Django处理字符串时,它会在执行任何其他操作之前将它们转换为Unicode字符串。因此,作为一般规则,如果传入一个bytestring,请准备好在结果中返回一个Unicode字符串。“

答案 6 :(得分:0)

关于编码的事情是,除了声明使用UTF-8(通过<meta>和项目的settings.py文件)之外,您当然应该尊重您的声明: make确保使用UTF-8编码保存文件。

原因很简单:您告诉解释器使用特定的字符集执行IO。当你没有使用该字符集保存文件时,翻译将会丢失。

默认情况下,某些IDE和编辑器将使用Latin1(ISO-8859-1),这解释了为什么Ryan的答案可行。虽然它不是原问题的有效解决方案,但可以快速修复。