[CPS-devel] UnicodeDecodeError: 'ascii' codec can't decode byte

danieltellez danieltellez at yerbabuena.es
Mon May 14 09:10:38 CEST 2007


danieltellez at yerbabuena.es wrote:
> Hello:
>
> I'm dealing with a portal (CPS 3.4.4 - Ubuntu Feisty Fawn) with 
> Spanish and English languages. I've got portal_translations installed.
>
> I get the next error
>
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 
> 142: ordinal not in range(128).
>
> when I try to post in a forum with a latin character in title, 
> description, etc, like that:
>
>                              ({'author': 'V\xedctor',
>                                'creation': DateTime('2007/05/10 
> 12:50:12.835 GMT-4'),
>                                'id': 'problemas-con-nokia-628x',
>                                'locked': False,
>                                'message': 'Parece ... modelo de 
> m\xf3vil. Al iniciar la aplicaci\xf3n y realizar algunos pasos aparece 
> una excepci\xf3n de OutOfMemory. Por lo que he visto este modelo de 
> m\xf3vil tiene ....<br />Como soluci\xf3n se comenta que cambiando el 
> Firmware del dispositivo se soluciona el problema. Espero que as\xed 
> podr\xe1is ',
>                                'parent_id': None,
>                                'published': True,
>                                'review_state': 'published',
>                                'subject': 'Problemas con Nokia 628x'},
>                               ())],
>
> Anyone knows why?
>
>
>
We found a solution:

In post_tree.py (CPSForum), at line 145, we do the next changes:

                author = str(post['author'])

                posterName = author

                posterName = cgi.escape(context.getPosterName(author))

                if isinstance(posterName, unicode):

                   posterName = str(posterName.encode("iso8859-15"))

                else:

                   posterName = str(posterName)

                fullname = '<a href="javascript:void(0)" onclick="javascript:window.open(\'popupdirectory_entry_view?dirname=members&id=' + author + '\',\'wclose\',\'width=500,height=200,scrollbars=yes,toolbar=no,status=no,resizable=yes,left=20,top=30\')">' +\

                       posterName + '</a>'


instead of:

                fullname = '<a href="javascript:void(0)" onclick="javascript:window.open(\'popupdirectory_entry_view?dirname=members&id=' + post['author'] + '\',\'wclose\',\'width=500,height=200,scrollbars=yes,toolbar=no,status=no,resizable=yes,left=20,top=30\')">' +\
                       cgi.escape(context.getPosterName(post['author'])) + '</a>'


We've got problems with "posterName", because it returns an incorrectly 
encoded value.

In other hand, we've made an improve to getPosterName method:

    mtool = context.portal_membership

    + author = mtool.getFullnameFromId(post_author)

    + if not author:

    +   author = post_author

    - return mtool.getFullnameFromId(post_author)
      

    + return author


This changes gives us fullname of authenticated user or the poster name 
in case of anonymous user.
The original method only gives us the name in authenticated users.


-- 
Daniel Téllez Sabán. 
Yerbabuena Software. Dpto I+D.
danieltellez at yerbabuena.es
http://www.yerbabuena.es
Tlf/Fax: 902 995 246 Móvil: 615 051 283




This list archive provided by Nuxeo, the leaders of open source ECM. Check out the Nuxeo 5 open source, standards-based ECM project.