で解凍:それはうまく働いたUnpickingデータは、Pythonの3.1で、このコードを使ってPython 2.5 I格納されたデータではzlibの
def GLWriter(file_name, string):
import cPickle
import zlib
data = zlib.compress(str(string))
file = open(file_name, 'w')
cPickle.dump(data, file)
、私はその過程での操作を実行して、そのデータを読み取ることができました逆。それは安全である必要はなく、人間の目には読めるものではありませんでした。私はそこに「test」を入れて、それが作成したファイルを開いた場合、それはこのように見えた:私たちは今のPython 3.1を使用するように強制していると我々はこれらを読むことができる何かをコーディングする必要があり、様々な理由から
S'x\x9c+I-.\x01\x00\x04]\x01\xc1'
p1
.
データファイル。
Pickleは文字列入力を受け付けないので、ファイルを "rb"で開く必要がありました。私はそれを行うとpickle.load(ファイル)でそれを開くしようとすると、私はこのエラーを取得:
File "<stdin>", line 1, in <module>
File "C:\Python31\lib\pickle.py", line 1365, in load
encoding=encoding, errors=errors).load()
UnicodeDecodingError: 'ascii' codec can't decode byte 0x9c in position 1: ordinal not in range(128)
私はピクルスでファイルを開くことができない場合がありますことを考え出すと、私はいくつかの研究を始めたところ、 pickleは、zlibが生成している主要なデータブロックの両側にいくつかの文字をラッピングしています。私はそれからzlibs出力にトリムして、zlib.decompressを通してそれを入れようとしました。私の問題は、ファイルを読み込み、 "\ x04"のようなものを1つではなく4つの文字として解釈することです。後で多くのテストと検索ができますし、pickleをファイルにロードする方法を見つけることができず、pythonでこれらのコードを認識させてzlibに渡すこともできます。
私の質問は次のとおりです。 Python3.1を使用して元のデータを復元するにはどうすればよいですか?
クライアントにPython2.5をインストールして手動で行うことを頼んでみたいと思いますが、これは不可能です。
ご協力いただきありがとうございます。
うわー、それは完璧に動作します!本当にありがとう! –