﻿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
21933	UnicodeDecodeError when writing unicode to stdout of management command	synotna	nobody	"In a management command, if you include unicode characters when writing to stdout (with self.stdout.write) you will get a UnicodeDecodeError

This happens even if the system locale is utf-8, and self.stdout.encoding is utf-8, and you .decode(self.stdout.encoding,'replace')

A workaround is to always .decode() to ascii, and if that is what should be done it should be documented at https://docs.djangoproject.com/en/dev/howto/custom-management-commands/


/myapp/management/commands/unicode_test.py
{{{
# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand

class Command(BaseCommand):
    args = '<none>'
    help = 'Do something'

    def handle(self, *args, **options):
        output = u'Σάββα▒^▒ο'
        self.stdout.write('Output: {}'.format(output))
}}}

{{{
Traceback (most recent call last):
  File ""manage.py"", line 10, in <module>
    execute_from_command_line(sys.argv)
  File ""/home/tech/.pyenv/versions/esldj-all-in-one-2.7.6/lib/python2.7/site-packages/django/core/management/__init__.py"", line 399, in execute_from_command_line
    utility.execute()
  File ""/home/tech/.pyenv/versions/esldj-all-in-one-2.7.6/lib/python2.7/site-packages/django/core/management/__init__.py"", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File ""/home/tech/.pyenv/versions/esldj-all-in-one-2.7.6/lib/python2.7/site-packages/django/core/management/base.py"", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File ""/home/tech/.pyenv/versions/esldj-all-in-one-2.7.6/lib/python2.7/site-packages/django/core/management/base.py"", line 285, in execute
    output = self.handle(*args, **options)
  File ""/home/tech/esldj/all-in-one/go4/management/commands/unicode_test.py"", line 10, in handle
    self.stdout.write('Output: {}'.format(output))
  File ""/home/tech/.pyenv/versions/esldj-all-in-one-2.7.6/lib/python2.7/site-packages/django/core/management/base.py"", line 65, in write
    if ending and not msg.endswith(ending):
}}}"	Uncategorized	new	Uncategorized	1.8	Normal				Unreviewed	0	0	0	0	0	0
