#8421: FileField traps error when uploading non-ascii filename
------------------------------------+---------------------------------------
Reporter: mizutori | Owner: nobody
Status: new | Milestone: 1.0
Component: Forms | Version: 1.0-beta-1
Keywords: FileField upload files | Stage: Unreviewed
Has_patch: 0 |
------------------------------------+---------------------------------------
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)
--
Ticket URL: <http://code.djangoproject.com/ticket/8421>
Django Code <http://code.djangoproject.com/>
The web framework for perfectionists with deadlines
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---