Domanda

Ho qualche problema di codifica il nome del file in GAE blobstore qui.

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("/")

Quando eseguo in locale, la funzione normale in consolle SDK, alt text

, ma dopo il caricamento di GAE è memorizzarlo spettacoli come stringa non decodifica "=? UTF-8? B? 54Wn54mH5pel5pyfIDIwMTAtMDgtMDM =? =" o =? Big5? B? v8O59afWt9MgMjAxMC0xMi0wMiA =? =

alt text

dubito la soluzione migliore potrebbe essere, smettere di usare caratteri cinesi il nome del file ...

Tutti i suggerimenti sono molto benvenuti :)

È stato utile?

Soluzione

E 'un problema aperto: gestore blobstore rottura dati codifica , controllo qui .

Altri suggerimenti

Il nome del file è BlobInfo MIME codificato da Google. Non so il motivo per cui Google sta facendo.

Si è rotto per le persone che vivono in paesi in via di multi-byte.

È possibile ottenere un nome file corretto, se si utilizza un codice di carattere, come di seguito:

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

Ecco un tweak per soluzione Takanao Endoh, che è possibile chiamare su ogni oggetto 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top