我有一个 Python 2.7 Django + AngularJS 应用程序。有一个输入字段输入数据模型,数据使用 Angular 的 $http 发送到服务器。当输入字段包含字符“é”时,Django 不喜欢它。当我使用“★é”时,Django 没有问题。在我看来,在 latin1 字符集之外的星形字符会强制编码为 utf-8,而当唯一的非拉丁字符是“é”时,Angular 将数据作为 latin1 发送,这混淆了我的 python 代码。
来自 Django 的错误消息是:UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 0: invalid continuation byte
当我的输入字符串仅包含 é 而没有星号时,告诉服务器上的 simplejson.loads() 函数使用 ISO-8859-1 (latin1) 编码读取数据工作正常,因此证明数据来自浏览器是 latin1 除非被非 latin1 字符(如星号)强制为 utf-8。
有没有办法告诉 Angular 总是使用 utf-8 发送数据?
将数据发送到服务器的 Angular 代码:
$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']