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 にアップロードした後、非デコード文字列のように表示され ます

代替テキスト

最善の解決策は、漢字のファイル名の使用をやめることだとは思いません...

すべての提案は大歓迎です:)

4

3 に答える 3

2

これは未解決の問題です: Blobstore ハンドラがデータ エンコーディングを壊しています。こちらを確認してください。

于 2010-12-09T21:10:31.317 に答える
0

これは、各 file_info オブジェクトで呼び出すことができる ENDOH takanao ソリューションの微調整です。

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 に答える
0

The filename of BlobInfo is MIME-encoded by Google. I do not know why Google is doing so.

It is broken for the people living in multi-byte countries.

You can get a correct filename, if you using any character code, as below:

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 に答える