0

データ ストアで利用可能な BLOB のセットを圧縮する必要があります。これらは、一部の html/images/swf/ などのさまざまなタイプであり、これらはすべてデータストアで blob として利用できます。

このソリューションを実装しようとしました: App Engine (Python) で動的ファイルを圧縮していますか?

いくつかの静的テキストで試してみましたが、それぞれのコンテンツを含む一連のファイルで zip を作成することもできましたが、クエリから zip を作成するときにいくつかの問題を追跡できませんでした。

z.writestr(fil.Template_name, my_data.encode('UTF-8'))
File "C:\Python25\lib\zipfile.py", line 626, in writestr
self.fp.write(zinfo.FileHeader())
File "C:\Python25\lib\zipfile.py", line 260, in FileHeader
return header + self.filename + extra
UnicodeDecodeError: 'ascii' codec can't decode byte 0xde in position 12: ordinal not in range(128)

これはコードのこの部分のエラーです

       class filesDB(db.model) 
                   Template_file = db.BlobProperty()
                   Template_name= db.StringProperty()


       output = StringIO.StringIO()
       z = zipfile.ZipFile(output,'w')
       files =  filesDB.all().filter("fCreatedBy","sandeep")
       for fil in files:
        my_data = fil.Template_file
        z.writestr(fil.Template_name, my_data)
        z.close()
4

1 に答える 1

3

zipfile のドキュメントによると:

ZIP ファイルの正式なファイル名エンコーディングはありません。
ファイル名が Unicode の場合は、それらを write() に渡す前に、目的のエンコーディングでバイト文字列に変換する必要があります。

たとえば、次のようにファイル名を UTF-8 でエンコードしてみてください。

class filesDB(db.model) 
                   Template_file = db.BlobProperty()
                   Template_name= db.StringProperty()


       output = StringIO.StringIO()
       z = zipfile.ZipFile(output,'w')
       files =  filesDB.all().filter("fCreatedBy","sandeep")
       for fil in files:
        my_data = fil.Template_file
        z.writestr(fil.Template_name.encode('utf-8'), my_data)
        z.close()
于 2011-07-01T07:38:25.543 に答える