this question belongs to django-user.

You need to use u'å' not 'å' in your python code.

> Is there a good reason
> why |force_unicode| and |lazy| do not use |smart_str|?

smart_str() creates a bytestring, but in Django everything is unicode until the 
end. Only one of the last
steps is to encode the unicode result to (most of the times) utf8.

I have seem a lot of unicode errors in django. But most of them were fixed long 
ago.

The last (I know of): https://code.djangoproject.com/ticket/18063
  "repr() should return only ascii, not unicode"

  Thomas

Am 26.04.2012 20:41, schrieb Andrei:
Hi,

I am having an issue with rendering Django's ErrorList if one of my error list 
items is unicode. When Django renders my
errorlist

|{{  form.non_field_errors}}
|

it runs the following code 
<https://github.com/django/django/blob/1.3.1/django/forms/util.py#L46>:

|class  ErrorList(list,  StrAndUnicode):
        """
        A collection of errors that knows how to display itself in various 
formats.
        """
        def  __unicode__(self):
                return  self.as_ul()

        def  as_ul(self):
                if  not  self:  return  u''
                return  mark_safe(u'<ul class="errorlist">%s</ul>'
                                %  ''.join([u'<li>%s</li>'  %  
conditional_escape(force_unicode(e))  for  ein  self]))
|

then in |force_unicode| 
<https://github.com/django/django/blob/1.3.1/django/utils/encoding.py#L74>:

|s=  unicode(str(s),  encoding,  errors)
|

and then translation in |lazy| 
<https://github.com/django/django/blob/1.3.1/django/utils/functional.py#L209>:

|def  __str_cast(self):
        return  str(self.__func(*self.__args,  **self.__kw))
|

The problem is that my string contains 'å' symbol and |str(u'å')| raises 
|UnicodeEncodeError|. Is there a good reason
why |force_unicode| and |lazy| do not use |smart_str|? I have to do it myself 
and provide error messages as |str|
objects instead of unicode to make it work.

So I get TemplateSyntaxError /Caught UnicodeEncodeError while rendering: 
'ascii' codec can't encode character u'\xe5' in
position 17: ordinal not in range(128)/. This seems telling that rendering my 
error list item (which is |u'å'|) caused
the first UnicodeEncodeError having unicode message /'ascii' codec can't encode 
character u'\xe5'/ and then second
UnicodeEncodeError while rendering the message from the first one. Am I 
mistaken?

Django version: 1.3.1 (but this seems to happen in 1.4 as well)

Full traceback: 
https://raw.github.com/gist/2499077/ba60cb752acdb429dd6c2814ffb24272037a367a/UnicodeEncodeError.txt

Thanks,

Andrei



--
You received this message because you are subscribed to the Google Groups "Django 
developers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-developers/-/pYaefZxhll4J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

--
Thomas Guettler, http://www.thomas-guettler.de/
E-Mail: guettli (*) thomas-guettler + de

--
You received this message because you are subscribed to the Google Groups "Django 
developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to