尝试导入序列化的XML文件时出现此错误。我从一个用于开发服务器的数据库中导出它,稍后我将它导入另一个开发服务器上的另一个数据库(在同一台机器上)。我很困惑为什么它不会在导入时处理UTF-8字符。我没有做任何特别的事。另外,当我上次测试它时,相同的代码工作。这是我用来导出和输出的代码。导入,在应用的views.py
...
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))
我用谷歌搜索&我检查了所有相关的StackOverflow问题(但答案并不能让我回答这个问题),并且仍然不知道为什么这会给我带来这个错误。我所知道的是非ascii字符正在使它变得愚蠢,这没有意义'因为Python没有UTF-8字符的问题而且我没有做任何会导致代码突然对待它的奇怪的东西
更新:以下是错误消息的更全面版本...
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/']
答案 0 :(得分:0)
似乎服务器启动时python3 manage.py runserver
,导入工作正常。当Django通过wsgi在Apache上运行时,当我通过Django导入它时,它无法正常工作。所以我猜测Apache在某种程度上干扰了它。它现在有效,只要我直接导入Django。