#23265: Django don't start on Windows with Python 2.7 (but only in august!)
--------------------------------------------+--------------------
Reporter: SpaceFox | Owner: nobody
Type: Uncategorized | Status: new
Component: Core (Management commands) | Version: 1.6
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------------+--------------------
On Windows / Python 2.7, if Django is set to use the French locale
("fra"), an UTF8 encoding error prevents it to start with this stack
trace:
{{{
Validating models...
0 errors found
Unhandled exception in thread started by <function wrapper at
0x0000000003F33B38>
Traceback (most recent call last):
File "C:\Users\SpaceFox\.virtualenvs\zdsenv\lib\site-
packages\django\utils\autoreload.py", line 93, in wrapper
fn(*args, **kwargs)
File "C:\Users\SpaceFox\.virtualenvs\zdsenv\lib\site-
packages\django\core\management\commands\runserver.py", line 104,
in inner_run
now = now.decode('utf-8')
File "C:\Users\SpaceFox\.virtualenvs\zdsenv\lib\encodings\utf_8.py",
line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xfb in position 2:
invalid start byte
}}}
How to reproduce this:
- Windows (tested on Windows 8.1 x64), all updates OK
- Python 2.7 (Python 2.7.8 (default, Jun 30 2014, 16:08:48) [MSC v.1500 64
bit (AMD64)] on win32)
- Django 1.6.5
- In settings.py, set locale to "fra": {{{locale.setlocale(locale.LC_TIME,
'fra')}}}
- Try to launch Django with {{{python manage.py runserver}}}. Kabooom!
The problem comes for the django/core/management/commands/runserver.py
line 102 to 104 :
{{{
now = datetime.now().strftime('%B %d, %Y - %X')
if six.PY2:
now = now.decode('utf-8')
}}}
These 3 lines suppose the strftime method returns an UTF-8 string... this
is false when Django runs on Windows with Python 2.7.
In French language, 3 month names have non-ASCII characters: "février",
"août" and "décembre" (February, August and December).
With described parameters, {{{now}}} is set as "ao¹t 09, 2014 - 00:56:41".
The crap that replaces the "û" character in "août" contains the 0xfb
character, which is illegal in UTF-8. This create the crash.
The problem is the same in February and December due to the 0xe9 byte in
{{{now}}}, caused by the "é" character.
With other non-ASCII characters, this may "work" as long as there is no
illegal byte in the given string: the output of this function will be
broken (not what is expected) but there will be no exception thrown.
I don't know how to correct this, therefore I can't provide any patch.
--
Ticket URL: <https://code.djangoproject.com/ticket/23265>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/051.3962689e99c8db5f91f603fea0475a00%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.