4

我在 GAE blobstore 中有一些文件名编码问题。

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 控制台中正常运行, 替代文字

但在上传到 GAE 后,它会显示非解码字符串 "=?UTF-8?B?54Wn54mH5pel5pyfIDIwMTAtMDgtMDM=?=" 或 =?Big5?B?v8O59afWt9MgMjAxMC0xMi0wMiA=?=

替代文字

我怀疑最好的解决方案可能是,停止使用中文字符文件名......

非常欢迎所有建议:)

4

3 回答 3

2

这是一个悬而未决的问题:Blobstore 处理程序破坏数据编码,请在此处查看

于 2010-12-09T21:10:31.317 回答
0

BlobInfo 的文件名由 Google 进行 MIME 编码。我不知道谷歌为什么这样做。

对于生活在多字节国家的人们来说,它被打破了。

如果您使用任何字符代码,您可以获得正确的文件名,如下所示:

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
于 2015-02-25T01:42:46.843 回答
0

这是对 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
于 2015-10-22T11:22:39.353 回答