GAE blobstore filename problema UTF-8 codifica
-
25-09-2019 - |
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,
, ma dopo il caricamento di GAE è memorizzarlo spettacoli come stringa non decodifica "=? UTF-8? B? 54Wn54mH5pel5pyfIDIwMTAtMDgtMDM =? =" o =? Big5? B? v8O59afWt9MgMjAxMC0xMi0wMiA =? =
dubito la soluzione migliore potrebbe essere, smettere di usare caratteri cinesi il nome del file ...
Tutti i suggerimenti sono molto benvenuti :)
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