2014-01-13 73 views
4
  • 的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/'] 
+2

你有没有试过这样的:your_string.encode('UTF-8')? – Mortezaipo

+0

您能否提供该错误的完整堆栈跟踪? –

+0

你能给我们回溯一下吗? – user2357112

回答

0

服务器何时启动python3 manage.py runserver看来,进口会工作得很好。当Django通过wsgi在Apache上运行时,它通过Django导入时无法正常工作。所以我猜测Apache是​​以某种方式干扰它的。现在它可以工作,只要我直接通过Django导入。

+1

我的所有关于ascii代码错误的问题,都是通过decode('UTF-8')或者encode('UTF-8')解决的。这些可以解决你的问题。 – Mortezaipo

+0

我会把它放在哪里?它只是由同一个应用程序处理的生成的导出和导入。 – Zamphatta

+0

请告诉我确切的一行,你有错误。 data = serialfile.read()在导入函数中? – Mortezaipo

相关问题