Python Django:非ASCII字符

Python Django:非ASCII字符,python,django,unicode,utf-8,Python,Django,Unicode,Utf 8,我的Django视图/模板无法处理特殊字符。下面的简单视图由于出现错误而失败。我得到以下错误: 文件中的非ASCII字符“\xf1” 我需要设置一些常规设置吗?如果我必须单独处理所有字符串,那会很奇怪:非美国字母非常常见 编辑 这是对以下评论的回应。它仍然失败:( 按照Gabi的建议,我在视图中添加了编码注释,在html中添加了元信息 现在,我上面的示例没有给出错误,但是ñ显示不正确 我尝试了返回render\u to\u response('tube/mysite.html',{“s”:“es

我的Django视图/模板无法处理特殊字符。下面的简单视图由于出现错误而失败。我得到以下错误:

文件中的非ASCII字符“\xf1”

我需要设置一些常规设置吗?如果我必须单独处理所有字符串,那会很奇怪:非美国字母非常常见

编辑 这是对以下评论的回应。它仍然失败:(

按照Gabi的建议,我在视图中添加了编码注释,在html中添加了元信息

现在,我上面的示例没有给出错误,但是ñ显示不正确

我尝试了
返回render\u to\u response('tube/mysite.html',{“s”:“español'})
。没有错误,但没有显示(如果s=hello,则显示)。html页面上的其他信息显示良好

我尝试将“español”硬编码到我的HTML中,但失败了:

UnicodeDecodeError“utf8”编解码器无法解码字节0xf

我试着把u放在绳子前面:

SyntaxError(unicode错误)'utf8'编解码器无法解码字节0xf1


这有帮助吗???

脚本开头有这样的内容吗:

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

见此:

编辑:第二个问题是关于html编码。请将其放在html页面的头部(您应该以html页面的形式发送请求,否则我认为您将无法正确输出该字符):


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

return HttpResponse(u'español')
我在网上找到的解释所有ASCII/Unicode混乱的最佳页面是:


享受吧!

在你的settings.py文件中设置为
'utf-8'

我和@dkgirl遇到了同样的问题,但是尽管做了这里建议的所有更改,我仍然无法获得settings.py中定义的常量字符串,这些字符串包含了从我的模板呈现的页面中显示的ñ

相反,我将上述解决方案中python代码中的每个“utf-8”实例都替换为“ISO-8859-1”(拉丁语-1)。它现在可以正常工作了

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

还有什么其他想法导致了这个问题吗?这是我以前的回溯:
回溯(最近一次呼叫最后一次):
文件“manage.py”,第4行,在
导入设置#假定位于同一目录中。
文件“C:\dev\xxxxx\settings.py”,第53行
('es',ugettext(u'Espa±ol'),
SyntaxError:(unicode错误)'utf8'编解码器无法解码位置0中的字节0xf1:
数据意外结束

在views.py顶部插入

# -*- coding: utf-8 -*-
并在字符串前加上“u”

my_str = u"plus de détails"
已解决!

参考自:

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

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


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

编码除了声明使用UTF-8之外(通过
和项目的
设置.py
文件)您当然应该尊重您的声明:确保使用UTF-8编码保存您的文件。

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


一些IDE和编辑器将使用拉丁语(ISO-8859-1)默认情况下,这就解释了为什么Ryang的答案可以工作。虽然这不是原始问题的有效解决方案,但可以快速解决问题。

您得到的实际错误是什么?是UnicodeDecoror吗?您使用的是哪个版本的Django?不是0.96吗?您需要确保您的编辑器正在使用e您指定的N代码。它仍然不起作用。添加注释(但不是u)会产生不同类型的错误。现在可以显示该单词,但根据浏览器的不同,N会被正方形或其他奇怪的符号替换。当我还包括u时,它根本不起作用。我得到“utf8”编解码器无法解码0位置的字节0xf1“我根据您的评论更新了问题描述。它仍然不起作用……return-HttpResponse('string')很粗糙……使用HTML模板(其中可以包含上述元),然后使用render\u-to\u-response('mytemplate.HTML')会很有用。”这解决了在代码中显式字符串上使用特殊字符的问题。谢谢。经过研究,我只需要在settings.py中做两个更改:gabi的“coding”头(已经有meta标记)和@dominique guardiola的强制unicode解释。+1,感谢您的帮助!您的答案是and和ANSWERT的组合,但不太完整。最好编辑其他答案以完成它们。如果不完整,请至少与其他答案一样完整。默认情况下,默认的_字符集设置为utf-8这可能在从发帖到发表评论已经过去了两年
# -*- coding: utf-8 -*-
my_str = u"plus de détails"