﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
23265	runserver crashes with some locales on Python 2	SpaceFox	nobody	"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."	Bug	closed	Core (Management commands)	1.6	Normal	fixed			Accepted	0	0	0	0	0	0
