﻿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
