UnicodeDecodeError: 'ascii' 编码无法解码错误,使用 render_to_response 和 dajax.assign 时出现

0 投票
1 回答
744 浏览
提问于 2025-04-17 05:59

我刚开始使用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)))

现在它运行得非常好。我也不知道为什么。希望这能帮到其他人。

撰写回答