Python Header: # ! /usr/bin/env python
# -*- coding: utf-8 -*-
# image_upload.py
Cherrypy Config: cherrypy.config.update(
{'tools.encode.on': True,
'tools.encode.encoding': 'utf-8',
'tools.decode.on': True,
},)
HTML Header: <head><meta http-equiv="Content-Type"
content="text/html;charset=ISO-8859-1"></head>
""" Python 2.7.3
Cherrypy 3.2.2
Ubuntu 12.04
"""
С формой HTML я загружаю файл изображения в базу данных. Это работает до сих пор без проблем. Однако, если имя файла не равно 100% в ASCII, похоже, нет способа получить его в UTF-8. Это странно, потому что с полями ввода текста HTML он работает без проблем, от сохранения до показа. Поэтому я предполагаю, что это проблема с кодировкой или декодированием с картой веб-приложений CherryPy, потому что загрузка связана с ней, like here.Python ─ UTF-8 filename из HTML-формы через CherryPy
Как это работает:
HTML-формы Посылает загруженный файл в другую функцию Python, который принимает файл в стандартном словаре **kwargs
. Отсюда вы получите имя файла с расширением, например: filename = kwargs['file'].filename
. Но это уже с неправильной кодировкой. До сих пор изображение не обрабатывалось, не хранилось и не использовалось каким-либо образом.
Я прошу решение, которое предотвратит его, просто проанализировать имя файла и изменить его «вручную». Я думаю, что результат уже есть в UTF-8, что делает его громоздким, чтобы понять это правильно. Вот почему заставить CherryPy сделать это, может быть, лучший способ. Но, возможно, это даже проблема с HTML, потому что файл поступает из формы.
Это неправильные декодированные умляуты.
Мне нужен вход в качестве результата.
input → result input → result
ä → ä Ä → Ä
ö → ö Ö → Ö
ü → ü Ü → Ãœ
Ниже приведены неудачные попытки получить правильный результат, который был бы: "Würfel"
ПРИМЕЧАНИЕ: img_file = kwargs['file']
оригинальная попытка:
result = img_file.filename.rsplit('.',1)[0]
результат: "Würfel"
кодирование Система изменения:
reload(sys) sys.setdefaultencoding('utf-8')
Результат: "Würfel"
кодировании ttempt 1:
result = img_file.filename.rsplit('.',1)[0].encode('utf-8')
результат: "Würfel"
кодирования попытка 2:
result = unicode(img_file.filename.rsplit('.',1)[0], 'urf-8')
Сообщение об ошибке:
TypeError: decoding Unicode is not supported
декодирования попытка:
result = img_file.filename.rsplit('.',1)[0].decode('utf-8')
Сообщение об ошибке:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
литая попытка:
result = str(img_file.filename.rsplit('.',1)[0])
Сообщение об ошибке:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
, пожалуйста, напишите 'repr (img_file.filename)', поэтому мы можем создать тот же bytearray в вашем контексте –
@PaoloCasciello, 'repr (img_file.filename)' возвратил это 'u'W \ xc3 \ xbcrfel.jpg'' –