我需要做的最好作为例子来描述。以前,我有以下代码:
content = u'<?xml version="1.0" encoding="windows-1251"?>\n' + ... #
with open(file_name, 'w') as f:
f.write(content.encode('cp1251'))
f.close;
现在我想修改我的整个应用程序的架构,并通过 JSON 将应该是文件内容的字符串发送给客户端,并通过 javascript 生成文件。
所以,现在我的代码看起来像这样:
response_data = {}
response_data['file_content'] = content.encode('cp1251')
response_data['file_name'] = file_name
return JsonResponse({'content':json.dumps(response_data, ensure_ascii=False)}) # error generated
问题是我得到UnicodeDecodeError: 'ascii' codec can't decode byte 0xd4 in position 53: ordinal not in range(128)
我也以这种方式尝试了第二个选项:
response_data = {}
response_data['file_content'] = content
response_data['file_name'] = file_name
return JsonResponse({'content':json.dumps(response_data, ensure_ascii=False).encode('utf8')}) # error generated
然后,在客户端,我尝试将 utf8 转换为 windows-1251。
$.post ('/my_url/', data, function(response) {
var file_content = JSON.parse(response.content).file_content;
file_content = UnicodeToWin1251(file_content);
...但是...我得到扭曲的符号。我知道我在这里做了一些非常错误的事情,并且可能会在编码方面搞砸,但我仍然一整天都无法解决这个问题。有人可以提示我的错误在哪里吗?