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 8421,FileField traps error when uploading non-ascii filename,mizutori,nobody,"Uploading non-ascii filename causes error by UnicodeEncodeError. If the form has two (or more) input fields for uploading files, and if you fill in either field by non-ascii filename and the other field empty, then an UnicodeEncodeError occurs when is_valid() is invoked. To the contrary, no error occurs when (1) the form has only one input field and fill it by non-ascii filename, (2) or the form has two (or more) input fields and fill them all by filenames. (3) or fill one or more input field(s) by ascii filename(s) I wonder why the error occurs only on condition that (4) the form has two (or more) input fields and one field is filled by non-ascii filename and the other field(s) is/are kept empty. [1] source code {{{ ---[ views.py ]--- class UploadForm(forms.Form): attach_1 = forms.FileField(required = False) attach_2 = forms.FileField(required = False) def test_upload(self,request): if request.method == 'POST': formup = UploadForm(request.POST,request.FILES) if formup.is_valid(): result = self.handle_uploaded_file(request.FILES) return HttpResponseRedirect('result.html') --- * the form page is encoded in UTF-8. [2] error message UnicodeEncodeError at /mysite1/debug/upload.html 'ascii' codec can't encode characters in position 37-39: ordinal not in range(128) Unicode error hint The string that could not be encoded/decoded was: NON-ASCII-UPLOAD-FILENAME [3] traceback message Traceback: File ""/usr/lib/python25/Lib/site-packages/django/core/handlers/base.py"" in get_response 86. response = callback(request, *callback_args, **callback_kwargs) File ""/mysite1/debug/views.py"" in upload 70. return MyDebug.toolbox.test_upload(request) File ""/mysite1/debug/util_mysite_debug.py"" in test_upload 177. if formup.is_valid(): File ""/usr/lib/python25/Lib/site-packages/django/forms/forms.py"" in is_valid 120. return self.is_bound and not bool(self.errors) File ""/usr/lib/python25/Lib/site-packages/django/forms/forms.py"" in _get_errors 111. self.full_clean() File ""/usr/lib/python25/Lib/site-packages/django/forms/forms.py"" in full_clean 212. value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name)) File ""/usr/lib/python25/Lib/site-packages/django/forms/widgets.py"" in value_from_datadict 266. return files.get(name, None) File ""/usr/lib/python25/Lib/site-packages/django/utils/datastructures.py"" in get 227. val = self[key] File ""/usr/lib/python25/Lib/site-packages/django/utils/datastructures.py"" in __getitem__ 198. raise MultiValueDictKeyError, ""Key %r not found in %r"" % (key, self) File ""/usr/lib/python25/Lib/site-packages/django/utils/datastructures.py"" in __repr__ 188. super(MultiValueDict, self).__repr__()) Exception Type: UnicodeEncodeError at /mysite1/debug/upload.html Exception Value: 'ascii' codec can't encode characters in position 37-39: ordinal not in range(128) }}}",,closed,Forms,1.0-beta,,worksforme,FileField upload files,,Unreviewed,0,0,0,0,0,0