diff --git a/rest_framework/parsers.py b/rest_framework/parsers.py index 82caa6f6d..161bc8090 100644 --- a/rest_framework/parsers.py +++ b/rest_framework/parsers.py @@ -303,7 +303,7 @@ class FileUploadParser(BaseParser): """ encoded_filename = force_text(disposition['filename*']) try: - charset, filename = encoded_filename.split('\'\'', 1) + charset, lang, filename = encoded_filename.split('\'', 2) filename = urlparse.unquote(filename) except (ValueError, LookupError): filename = force_text(disposition['filename']) diff --git a/tests/test_parsers.py b/tests/test_parsers.py index d19b46519..bc84f1c71 100644 --- a/tests/test_parsers.py +++ b/tests/test_parsers.py @@ -127,6 +127,10 @@ class TestFileUploadParser(TestCase): filename = parser.get_filename(self.stream, None, self.parser_context) self.assertEqual(filename, 'ÀĥƦ.txt') + self.__replace_content_disposition('inline; filename=fallback.txt; filename*=utf-8\'en-us\'ÀĥƦ.txt') + filename = parser.get_filename(self.stream, None, self.parser_context) + self.assertEqual(filename, 'ÀĥƦ.txt') + self.__replace_content_disposition('inline; filename=fallback.txt; filename*=utf-8--ÀĥƦ.txt') filename = parser.get_filename(self.stream, None, self.parser_context) self.assertEqual(filename, 'fallback.txt')