Opened 16 years ago
Closed 16 years ago
#4420 closed defect (fixed)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 4: ordinal not in range(128)
Reported by: | anonymous | Owned by: | Jeff Hammel |
---|---|---|---|
Priority: | high | Component: | TracHoursPlugin |
Severity: | blocker | Keywords: | |
Cc: | public@… | Trac Release: | 0.11 |
Description
when clicking on the menu item "hours" the error
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 4: ordinal not in range(128)
Attachments (0)
Change History (9)
comment:1 Changed 16 years ago by
Priority: | normal → high |
---|
comment:2 Changed 16 years ago by
Resolution: | → worksforme |
---|---|
Status: | new → closed |
comment:3 Changed 16 years ago by
Resolution: | worksforme |
---|---|
Status: | closed → reopened |
see here: t:#7959
comment:4 Changed 16 years ago by
After adding #7959, the error changed to:
Genshi UnicodeDecodeError error while rendering template 'C:\Python25\lib\site-packages\trachoursplugin-0.3-py2.5.egg\trachours\templates\hours_timeline.html', line 96, char -1
I'm using a Japanese version of Windows and was wondering if that has anything to do with it.
comment:5 Changed 16 years ago by
The dump log for the above error is as follows:
2009-03-02 17:34:56,733 Trac[main] DEBUG: Dispatching <Request "GET u'/hours'"> 2009-03-02 17:34:56,750 Trac[hours] DEBUG: QueryModule: Using default query: status!=bogus 2009-03-02 17:34:56,750 Trac[chrome] DEBUG: Prepare chrome data for request 2009-03-02 17:34:56,765 Trac[session] DEBUG: Retrieving session for ID u'Administrator' 2009-03-02 17:34:56,765 Trac[query] DEBUG: Count results in Query: 6 2009-03-02 17:34:56,765 Trac[query] DEBUG: Query SQL: SELECT t.id AS id,t.summary AS summary,t.status AS status,t.priority AS priority,t.time AS time,t.changetime AS changetime,priority.value AS priority_value,estimatedhours.value AS estimatedhours FROM ticket AS t
LEFT OUTER JOIN ticket_custom AS estimatedhours ON (id=estimatedhours.ticket AND estimatedhours.name='estimatedhours') LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)
WHERE COALESCE(t.status,)!=u'bogus' ORDER BY COALESCE(priority.value,)=,CAST(priority.value AS int),t.id 2009-03-02 17:34:57,108 Trac[main] WARNING: 500 Trac Error (Genshi UnicodeDecodeError error while rendering template 'C:\Python25\lib\site-packages\trachoursplugin-0.3-py2.5.egg\trachours\templates\hours_timeline.html', line 96, char -1)
comment:6 Changed 16 years ago by
I got this error, too.
I've just installed trac-0.11.3 and the trachoursplugin downloaded today from scratch and went to the "/hours" page and got exactly the same error:
Genshi UnicodeDecodeError error while rendering template '[...]/trachours/templates/hours_timeline.html', line 96, char -1
Lines 95-96 of the template read
<a href="${prev_url}">Week of ${prev_week.strftime('%B %d, %Y')} - ${from_date.strftime('%B %d, %Y')}</a>
Apparently, strftime returns non-ASCII characters. On my system with German locale, the month name (%B) of May is "März":
$ python Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import locale >>> import os >>> import time >>> print os.environ['LANG'] de_DE.UTF-8 >>> locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8') 'de_DE.UTF-8' >>> time.strftime('%B %d, %Y') 'M\xc3\xa4rz 18, 2009' >>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') 'en_US.UTF-8' >>> time.strftime('%B %d, %Y') 'March 18, 2009' >>>
Here you can see that non-ASCII characters were indeed returned (as a non-unicode string in this case). Setting LANG=en_US.UTF-8 works around the bug on my system. I don't know what the proper fix for this is, so I'm leaving this to you.
By the way, the setlocale() call is probably located in trac/web/main.py, dispatch_request():
def dispatch_request(environ, start_response): ... locale.setlocale(locale.LC_ALL, environ['trac.locale'])
Also, you can get the locale's encoding (which should be the encoding used by strftime()) with locale.getlocale():
$ python Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import locale >>> locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8') 'de_DE.UTF-8' >>> locale.getlocale() ('de_DE', 'UTF8') >>>
I hope that's enough info to make fixing the bug easy.
Regards, Milan
comment:7 Changed 16 years ago by
Cc: | public@… added; anonymous removed |
---|
comment:8 Changed 16 years ago by
Thanks for the helpful information. I think I understand the issue for the first time (outside of not understanding the strangeness that is unicode in python, but that's another story). I may have a solution: the Trac to_unicode
helper function. This is actually ultimately a python "bug", or at least issue, that is more thoroughly documented here:
http://bugs.python.org/issue5398
Will commit shortly. I have no good way of testing this, unless someone wants to hold my hand through the process, so if this does not work, I encourage patches (hopefully, patches that will work in the generic sense and not for particular use-cases) as I don't have a setup to debug.
comment:9 Changed 16 years ago by
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
not enough information to reproduce; please reopen with a stack trace, etc, and i'll look at it. maybe this is related to #4377 ? or maybe not. impossible to tell with so little info. suffice it to say, i can't reproduce and clicking on the hours menu item worksforme