Проблема с кодировкой UTF-8 в BLOB-магазине GAE - PullRequest
4 голосов
/ 09 декабря 2010

У меня есть некоторая проблема с кодировкой имени файла в магазине блогов GAE.

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload_files = self.get_uploads('file') 
        blob_info = upload_files[0]

        #Problem right here    
        decoded_filename = blob_info.filename.decode("utf-8")
        #

        File_info = Fileinfo(
            key_name=str(blob_info.key()),
            filename=decoded_filename,
            )
        File_info.put()
        self.redirect("/")

Когда я работаю в локальном режиме, он работает нормально в консоли SDK, alt text

но после выгрузки в GAE он хранится как строка без декодирования "=? UTF-8? B? 54Wn54mH5pel5pyfIDIwMTAtMDgtMDM =? =" или =? Big5? B? v8O59afWt9MgMjAxMC0xMi0wMiA =? =

alt text

Я сомневаюсь, что лучшее решение может быть, прекратить использование имени китайского символа ...

Все предложения приветствуются :)

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

Это открытый вопрос: Обработчик Blobstore нарушает кодировку данных , отметьте здесь .

0 голосов
/ 22 октября 2015

Ниже приведено решение по настройке ENDOH takanao, которое можно вызвать для каждого объекта file_info:

def get_filename_from_file_info(file_info):
    filename_mime = file_info.filename
    if isinstance(filename_mime, unicode):
        filename_mime_utf8 = filename_mime.encode('utf-8')
    else:
        filename_mime_utf8 = filename_mime
    filename_encoded, encoding = email.header.decode_header(filename_mime_utf8)[0]
    if encoding is not None:
        filename_unicode = filename_encoded.decode(encoding)
        filename_utf8 = filename_unicode.encode('utf-8')
        return filename_utf8
    return filename_mime_utf8
0 голосов
/ 25 февраля 2015

Имя файла BlobInfo MIME-кодируется Google.Я не знаю, почему Google делает это.

Он не работает для людей, живущих в многобайтовых странах.

Вы можете получить правильное имя файла, если используете любой код символа,ниже:

import email

for blob_info in self.get_uploads('file'):
  filename_mime = blob_info.filename
  if isinstance(filename_mime, unicode):
    filename_mime_utf8 = filename_mime.encode('utf-8')
  else:
    filename_mime_utf8 = filename_mime
  filename_encoded, encoding = email.header.decode_header(filename_mime_utf8)[0]
  if encoding is not None:
    filename_unicode = filename_encoded.decode(encoding)
    filename_utf8 = filename_unicode.encode('utf-8')
    blob_info._BlobInfo__entity['filename'] = filename_utf8
...