How to solve UnicodeDecodeError in mezzanine?

北城以北 提交于 2019-12-11 07:51:44

问题


I am using mezzanine cms. When I scrap the data from the blogspot I got this error

blog_id: sanavitastudio
Traceback (most recent call last):
  File "/home/nyros/hs/git_br/2013/Oct-9/healersource/apps/blog_hs/forms.py", line 226, in save
    blog_id=blog_id)
  File "/home/nyros/hs/1a9pinaxenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 150, in call_command
    return klass.execute(*args, **defaults)
  File "/home/nyros/hs/1a9pinaxenv/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/home/nyros/hs/git_br/mezzanine/mezzanine/blog/management/base.py", line 172, in handle
    post, created = BlogPost.objects.get_or_create(**initial)
  File "/home/nyros/hs/1a9pinaxenv/local/lib/python2.7/site-packages/django/db/models/manager.py", line 134, in get_or_create
    return self.get_query_set().get_or_create(**kwargs)
  File "/home/nyros/hs/1a9pinaxenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 452, in get_or_create
    obj.save(force_insert=True, using=self.db)
  File "/home/nyros/hs/git_br/mezzanine/mezzanine/core/models.py", line 221, in save
    super(Displayable, self).save(*args, **kwargs)
  File "/home/nyros/hs/git_br/mezzanine/mezzanine/core/models.py", line 77, in save
    super(Slugged, self).save(*args, **kwargs)
  File "/home/nyros/hs/git_br/mezzanine/mezzanine/core/models.py", line 46, in save
    super(SiteRelated, self).save(*args, **kwargs)
  File "/home/nyros/hs/git_br/mezzanine/mezzanine/core/models.py", line 116, in save
    self.description = strip_tags(self.description_from_content())
  File "/home/nyros/hs/git_br/mezzanine/mezzanine/core/models.py", line 146, in description_from_content
    description = unicode(self)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 5: ordinal not in range(128)

Code:

            import xmltest
            blog_id = xmltest.blogname(self.cleaned_data['blog_id'])

            print(type(blog_id))
            call_command(
                'import_blogger_hs',
                mezzanine_user=request.user.username,
                blog_id=blog_id)
            return False

And blogname method for If you give blogname it will automatically scrap the blogID and it is represented as blog_id.


回答1:


Ah, so now with the code the problem is most likely with request.user.username unfortunately the mezzanine code assumes it is receiving an ascii object (what unicode(self) in the stacktrace is doing) and is "double encoding" it... grrr!

I would call your method the same way but do this:

call_command(
    'import_blogger_hs',
    mezzanine_user=request.user.username.decode('utf-8'),
    blog_id=blog_id)

Does that fix the issue?



来源:https://stackoverflow.com/questions/19262960/how-to-solve-unicodedecodeerror-in-mezzanine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!