0

Pythonとurlib2を使用してサーバーからファイルをダウンロードすると、ファイルの内容が本来の内容とわずかに異なります。

ダウンロードしたバージョンのファイルに余分な行( "\ r\n"または"\n")が追加されているという点で異なります。これは、xml形式のファイルでは大きな問題ではありませんが、ファイルの内容がわずかに異なり、復号化できないため、ファイルが暗号化されている場合の大きな問題です。

FTPを使用してそのファイルをダウンロードし、その方法でダウンロードしたときに正しい内容であることがわかったため、サーバー上のファイルが間違っているのではなく、ファイルの内容を変更するダウンロードコードを知っています。さらに役立つ情報:ファイルはASCIIエンコードされています。私のサーバーはWindows.NETであり、http応答がASCIIなのかUnicodeなのかわからないのですが、それが問題の原因になっている可能性がありますか?

urlib2にサーバーからファイルをダウンロードさせ、コンテンツが変更されないようにするにはどうすればよいですか?

元のコンテンツ:

     <clientlist>


       <client>
         <clientauthblah>blah</clientauthblah>
         <version9>blah</version9>
         <version10>blah</version10>
         <companyno>1</companyno>
         <companyname>blah</companyname>
       </client>

ダウンロードコードを実行すると、これは取得したコンテンツです。これは、ファイルが暗号化されているために取得できないものであり、ファイルを復号化できないことを意味します。

 <clientlist>




   <client>

     <clientauthblah>blah</clientauthblah>

     <version9>blah</version9>

     <version10>blah</version10>

     <companyno>1</companyno>

     <companyname>blah</companyname>

   </client>

これが私のコードです:

# Download
response = urllib2.urlopen("http://www.mywebsite.com/Clients.xml")
output    = open("tempEncrypted.xml",'w')
res       = response.read()
output.write(res)
output.close()
4

1 に答える 1

1

ここでの問題は次の行です。

output    = open("tempEncrypted.xml",'w')

Pythonはデフォルトでファイルをテキストモードで開きます。つまり、改行変換が行われる可能性があります。プラットフォームの違い、ユニバーサルニューラインなどによって詳細が複雑になっています。

しかし、バイナリデータがある場合、答えは簡単です。'wb'代わりにを使用して、バイナリモードで開き'w'ます。

output    = open("tempEncrypted.xml",'wb')
于 2013-01-16T02:28:05.153 に答える