Python 下载文件代码会更改文件内容并影响解密文件的能力
当我使用Python和urlib2从服务器下载文件时,文件的内容与它们应该的内容略有不同 它们的不同之处在于,在文件的下载版本中添加了额外的行(“\r\n”或“\n”)。对于xml格式的文件来说,这不是一个主要问题,但当我的文件被加密时,这是一个主要问题,因为文件内容略有不同,无法解密 我知道是我的下载代码改变了文件内容,而不是服务器上的文件出错,因为我使用FTP下载了该文件,并在以这种方式下载时发现该文件具有正确的内容。一些更有用的信息:文件是ASCII编码的。我的服务器是Windows.NET,我不确定http响应是ascii还是unicode-可能是这导致了问题 如何让urlib2从我的服务器下载我的文件并确保内容不发生更改 原始内容:Python 下载文件代码会更改文件内容并影响解密文件的能力,python,encryption,urllib,Python,Encryption,Urllib,当我使用Python和urlib2从服务器下载文件时,文件的内容与它们应该的内容略有不同 它们的不同之处在于,在文件的下载版本中添加了额外的行(“\r\n”或“\n”)。对于xml格式的文件来说,这不是一个主要问题,但当我的文件被加密时,这是一个主要问题,因为文件内容略有不同,无法解密 我知道是我的下载代码改变了文件内容,而不是服务器上的文件出错,因为我使用FTP下载了该文件,并在以这种方式下载时发现该文件具有正确的内容。一些更有用的信息:文件是ASCII编码的。我的服务器是Windows.NE
<clientlist>
<client>
<clientauthblah>blah</clientauthblah>
<version9>blah</version9>
<version10>blah</version10>
<companyno>1</companyno>
<companyname>blah</companyname>
</client>
这里的问题是这一行:
output = open("tempEncrypted.xml",'w')
Python默认以文本模式打开文件,这意味着您可能会得到换行转换。由于平台差异、通用换行等原因,细节变得复杂
但是如果你有二进制数据,答案很简单:用'wb'
而不是'w'
以二进制模式打开它:
output = open("tempEncrypted.xml",'wb')
尝试在二进制模式下使用FTP下载它。这将阻止行结尾的translational让您使用Python 3.x吗?@frb否我使用的是Python 2.7请打印标题(从
response.info()
)。我猜您的服务器配置错误,将“tempEncrypted.xml”视为text/xml
或application/xml
或类似内容,并将其作为内容类型发送。由于该内容类型明确表示“这是空白不重要的文本”,因此任何一方都可以对换行符执行任何操作。如果这是一个问题,有一些方法可以解决,但正确的解决方案是停止使用与您的内容不匹配的内容类型。此外,您应该在打开命令中使用模式'wb'
,而不是'w'
。以文本模式打开文件也可以进行换行转换(尤其是在Windows上)。
output = open("tempEncrypted.xml",'w')
output = open("tempEncrypted.xml",'wb')