UnicodeDecodeError: 'ascii' 编码无法解码错误,使用 render_to_response 和 dajax.assign 时出现
我刚开始使用Django和Dajax,遇到了一个问题。就是在用Dajax的assign功能把一个HTML文件加载到另一个HTML的div里时,非英语字符出现了问题。当我把网站语言设置成英语时,一切正常,但一旦切换到西班牙语就不行了。
这是我正在做的事情:
我尝试了:
dajax.assign('#setttabs-1','innerHTML','abc')
这样是可以的。div里显示的文本没问题,但当我尝试(我想把网站翻译成西班牙语):
dajax.assign('#setttabs-1','innerHTML','ábcñ')
就出现了异常:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 465: ordinal not in range(128)
我去谷歌上查了一下,发现了这个:
dajax.assign('#setttabs-1','innerHTML','ábcñ'.decode('utf-8'))
这样又能正常工作,所有字符都显示正确,但问题是我需要在那个div里加载一个模板,所以接下来这个就不行了:
dajax.assign('#setttabs-1','innerHTML',render_to_response('./settings/_change_language.html'.decode('utf-8'), context_instance=RequestContext(request)))
当它尝试加载模板时,也会抛出上面提到的异常。这个模板里有编码的meta标签:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
我的ajax.py文件开头也写了:
# coding: utf-8
我该怎么告诉Dajax把这个文件当作utf-8来处理,这样才能正确渲染呢?有没有更实用的方法来实现我想做的事情?我感觉我可能漏掉了什么简单的东西,但就是想不明白。
提前感谢你们提供的任何帮助。
1 个回答
0
我把这个:
dajax.assign('#setttabs-1','innerHTML',render_to_response('./settings/_change_language.html'), context_instance=RequestContext(request)))
改成了这个:
dajax.assign('#setttabs-1','innerHTML',render_to_string('./settings/_change_language.html'.decode('utf-8'), context_instance=RequestContext(request)))
现在它运行得非常好。我也不知道为什么。希望这能帮到其他人。