diff --git a/django/core/management/commands/makemessages.py b/django/core/management/commands/makemessages.py index c0f9d58f9d..8e00c51dc3 100644 --- a/django/core/management/commands/makemessages.py +++ b/django/core/management/commands/makemessages.py @@ -549,7 +549,7 @@ class Command(BaseCommand): input_files = [bf.work_path for bf in build_files] with NamedTemporaryFile(mode='w+') as input_files_list: - input_files_list.write('\n'.join(input_files)) + input_files_list.write(force_str('\n'.join(input_files), encoding=DEFAULT_LOCALE_ENCODING)) input_files_list.flush() args.extend(['--files-from', input_files_list.name]) args.extend(self.xgettext_options) diff --git a/docs/releases/1.9.8.txt b/docs/releases/1.9.8.txt index 7265e166b8..8db5c3d01f 100644 --- a/docs/releases/1.9.8.txt +++ b/docs/releases/1.9.8.txt @@ -12,3 +12,6 @@ Bugfixes * Fixed missing ``varchar/text_pattern_ops`` index on ``CharField`` and ``TextField`` respectively when using ``AddField`` on PostgreSQL (:ticket:`26889`). + +* Fixed ``makemessages`` crash on Python 2 with non-ASCII file names + (:ticket:`26897`). diff --git a/tests/i18n/test_extraction.py b/tests/i18n/test_extraction.py index 811edc15f5..6312456e50 100644 --- a/tests/i18n/test_extraction.py +++ b/tests/i18n/test_extraction.py @@ -209,6 +209,10 @@ class BasicExtractorTests(ExtractorTests): self.assertIn("UnicodeDecodeError: skipped file not_utf8.txt in .", force_text(out.getvalue())) + def test_unicode_file_name(self): + open(os.path.join(self.test_dir, 'vidéo.txt'), 'a').close() + management.call_command('makemessages', locale=[LOCALE], verbosity=0) + def test_extraction_warning(self): """test xgettext warning about multiple bare interpolation placeholders""" shutil.copyfile('./code.sample', './code_sample.py')