【问题标题】:Django: UnicodeEncodeError while parsing xml with ElementTreeDjango:使用 ElementTree 解析 xml 时出现 UnicodeEncodeError
【发布时间】:2015-05-04 19:00:37
【问题描述】:

我正在尝试从带有西里尔字符的 xml 文件中获取产品目录。我用 ElementTree 解析它,获取数据并尝试将其保存到数据库,但出现编码错误:

Request Method: GET
Request URL: http://detsad-komplekt.loc/catalog/commerce/

Django Version: 1.8
Python Version: 2.7.6
Installed Applications:
(u'admin_tools',
 u'admin_tools.theming',
 u'admin_tools.menu',
 u'admin_tools.dashboard',
 u'django.contrib.admin',
 u'django.contrib.auth',
 u'django.contrib.contenttypes',
 u'django.contrib.sessions',
 u'django.contrib.messages',
 u'django.contrib.staticfiles',
 u'mptt',
 u'daguerre',
 u'ckeditor',
 u'home',
 u'accounts',
 u'catalog',
 'debug_toolbar',
 'coverage')
Installed Middleware:
(u'debug_toolbar.middleware.DebugToolbarMiddleware',
 u'django.contrib.sessions.middleware.SessionMiddleware',
 u'django.middleware.common.CommonMiddleware',
 u'django.middleware.csrf.CsrfViewMiddleware',
 u'django.contrib.auth.middleware.AuthenticationMiddleware',
 u'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 u'django.contrib.messages.middleware.MessageMiddleware',
 u'django.middleware.clickjacking.XFrameOptionsMiddleware',
 u'django.middleware.security.SecurityMiddleware')


Traceback:
File "/home/oleshko/design/.virtualenvs/detsad-komplekt/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/oleshko/design/.virtualenvs/detsad-komplekt/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)
File "/home/oleshko/design/.virtualenvs/detsad-komplekt/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
  89.         return handler(request, *args, **kwargs)
File "/home/oleshko/design/detsad-komplekt/project/catalog/views.py" in get
  109.         cat = parseCML()
File "/home/oleshko/design/detsad-komplekt/project/catalog/tools.py" in parseCML
  21.         name = name.decode('utf8', 'ignore')
File "/home/oleshko/design/.virtualenvs/detsad-komplekt/lib/python2.7/encodings/utf_8.py" in decode
  16.     return codecs.utf_8_decode(input, errors, True)

Exception Type: UnicodeEncodeError at /catalog/commerce/
Exception Value: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)

这是我的功能:

def parseCML():
    with open('/home/oleshko/desktop/webdata/import.xml', 'r') as xml_file:
        tree = etree.parse(xml_file)
    root = tree.getroot()
    elems = root[1][4]
    res = []
    for prod in elems:
        for cat in prod[4]:
            c = Category.objects.filter(integration_id=cat.text)       
        name = prod[2].text
        name = name.decode('utf8', 'ignore')
        desc = prod[5].text
        desc = desc.decode('utf8', 'ignore')
        img = str(prod[6].text)
        img = img.replace('import_files', '')
        slug = pytils.translit.slugify(name)
        # res.append([c, name, desc, img, '################'])
        product = Product(name=name, slug=slug, category=c, description=desc, price=1)
        new_product = product.save()
        prod_img = ProductImage(product=new_product, src=img)

    return True

我已经浪费了 4 个小时来尝试解决这个问题。请给点建议...

【问题讨论】:

    标签: python xml django


    【解决方案1】:

    问题出在: c = Category.objects.filter(integration_id=cat.text)
    我忘记了它返回查询集而不是类别实例,在删除异常时某处发生解码错误。感谢用户“catavaran”

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2021-02-06
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多