我需要做的是最好的描述爲例。 以前,我有如下代碼:在JSON中發送「windows-1251」編碼的字符串從python到javascript
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);
...但是...我得到了扭曲的符號。 我知道我在這裏做了一些非常錯誤的事情,並且很可能會弄亂編碼方面的事情,但仍然有一整天我無法解決這個問題。有人可以提示我的錯誤在哪裏嗎?
我是否正確理解,如果我沒有提及任何編碼,那麼內容將是utf-8? –
@EdgarNavasardyan:Python 2中的Python json庫默認編碼爲UTF-8,是的,以實現最大的兼容性。您的Javascript代碼將收到正確,有效的JSON,並可以再次解碼爲Javascript對象(包括Unicode文本)。 –