- 的Django 1.6.1
- 的Python 3.2.3
- 阿帕奇2.2.2
- Ubuntu的12.04
- Postgres 9.1.11
我在尝试导入序列化的XML文件时出现此错误。我从一个用于开发服务器的数据库中导出它,稍后我将它导入另一个开发服务器上的另一个数据库(在同一台机器上)。我很困惑,为什么它不处理导入时的UTF-8字符。我没有做任何特别的事情。另外,当我上次测试它时,相同的代码起作用。下面是我使用导出&进口我Google &我检查了那名相关的所有问题的StackOverflow(但答案没有我的线索所涉及的代码,在一个应用程序的views.py
...'ASCII' 编解码器不能解码字节0xe2:顺序不在范围内(128)
from django.shortcuts import render, render_to_response, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.decorators import user_passes_test
from django.core import serializers
@user_passes_test(lambda u: u.is_superuser)
def export_serial(request):
'''
This exports data using Django serializing.
See: https://docs.djangoproject.com/en/dev/topics/serialization/
'''
XMLSerializer = serializers.get_serializer("xml")
xml_serializer = XMLSerializer()
xml_serializer.serialize(list(ThisModel.objects.all())
+ list(ThatModel.objects.all())
+ list(ThirdModel.objects.all()))
data = xml_serializer.getvalue()
response = HttpResponse(mimetype='text/xml')
response['Content-Disposition'] = 'attachment; filename=my-backup.xml'
response.write(data)
return response
@user_passes_test(lambda u: u.is_superuser)
def import_serial(request):
'''
This is for importing data that was saved/backed up, as serialized.
'''
xmlfile = '/home/zamphatta/path/to/my-backup.xml'
serialfile = open(xmlfile,'r')
data = serialfile.read()
serialfile.close()
for deserialized_object in serializers.deserialize("xml", data):
deserialized_object.save()
template = loader.get_template('z-style/index.htm')
context = RequestContext(request, {
'title': data,
})
return HttpResponse(template.render(context))
回答这个问题),并且仍然不知道为什么这会给我带来这个错误。我所知道的是,非ASCII字符会使它变成呕吐物,这是没有意义的,因为Python对UTF-8字符没有问题,而且我没有做任何奇怪的事情,导致代码突然以不同的方式对待它。
UPDATE:这里的错误消息的更全面的版本...
UnicodeDecodeError at /sdb/import/
'ascii' codec can't decode byte 0xe2 in position 5367: ordinal not in range(128)
Request Method: GET
Request URL: http://coral/sdb/import/
Django Version: 1.6.1
Exception Type: UnicodeDecodeError
Exception Value:
'ascii' codec can't decode byte 0xe2 in position 5367: ordinal not in range(128)
Exception Location: /usr/lib/python3.2/encodings/ascii.py in decode, line 26
Python Executable: /usr/bin/python
Python Version: 3.2.3
Python Path:
['/usr/local/lib/python3.2/dist-packages/distribute-0.6.49-py3.2.egg',
'/usr/local/lib/python3.2/dist-packages/CherryPy-3.2.4-py3.2.egg',
'/usr/lib/python3.2',
'/usr/lib/python3.2/plat-linux2',
'/usr/lib/python3.2/lib-dynload',
'/usr/local/lib/python3.2/dist-packages',
'/usr/local/lib/python3.2/dist-packages/setuptools-0.6c11-py3.2.egg-info',
'/usr/lib/python3/dist-packages',
'/home/dfy/code/zamphatta/',
'/home/dfy/code/zamphatta/zamphatta/']
你有没有试过这样的:your_string.encode('UTF-8')? – Mortezaipo
您能否提供该错误的完整堆栈跟踪? –
你能给我们回溯一下吗? – user2357112