我有一個Python 2.7的Django + AngularJS應用程序。有一個輸入字段輸入到數據模型中,並使用Angular的$ http將數據發送到服務器。當輸入字段包含字符「é」時,Django不喜歡它。當我使用「★é」時,Django沒有問題。在我看來,latin1字符集之外的星號字符將編碼強制爲utf-8,而當唯一的非拉丁字符是「é」時,Angular將數據作爲latin1發送,這會混淆我的Python代碼。AngularJS中的Latin1/UTF-8編碼問題
從Django中的錯誤信息是: UnicodeDecodeError錯誤:無效延續字節
告訴simplejson.loads()函數在服務器上讀取數據:在位置0「UTF8」編解碼器不能解碼字節0xe9使用ISO-8859-1(latin1)編碼在我的輸入字符串中只包含é並且沒有星號時工作正常,因此證明來自瀏覽器的數據是latin1,除非被非latin1字符強制爲utf-8 ,就像明星一樣。
有沒有辦法告訴Angular總是使用utf-8發送數據?
將數據發送到服務器的角度代碼:
$http({
url: $scope.dataUrl,
method: 'POST',
data: JSON.stringify({recipe: recipe}),
headers: {'Content-Type': 'application/json'}
}).success(...).error(...);
Django的代碼讀取數據:
recipe = simplejson.loads(request.raw_post_data)['recipe']
嗨,你只是一個想法 是否有可能改變「Accept-Charset」http頭文件和$ httpProvider.defaults.headers配置對象,如下所示:http://docs.angularjs.org/api /ng.$http – koolunix