答案 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的答案可行。虽然它不是原问题的有效解决方案,但可以快速修复。