2012-04-11 48 views
7

Java应用程序将XML发送到Python应用程序。他们都在同一台机器上。 当我打开收到的文件时,我可以看到多余的行(由于额外的CR)。这可能是什么原因?Python在接收​​到的行末添加额外的CR

这是接收器:

f = open('c:/python/python.xml', 'w') 
while 1: 
    print("xxx")   
    data = socket.recv(recv_frame) 
    remain_byte = remain_byte - len(data) 
    print(remain_byte) 
    f.write(data) 
    if (something): 
     break 

这是发送者:

while ((bytesRead = file_inp.read(buffer)) > 0) { 
     output_local.write(buffer, 0, bytesRead); 
    } 

原来是这样的文件:

<root><CR><LF> 
    <SONG><CR><LF> 
     <ARTIST>Coldplay</ARTIST><CR><LF> 
    </SONG><CR><LF> 
</root><CR><LF> 

这是所接收到的:

<root><CR> 
<CR><LF> 
    <SONG><CR> 
<CR><LF> 
     <ARTIST>Coldplay</ARTIST><CR> 
<CR><LF> 
    </SONG><CR> 
<CR><LF> 
</root><CR> 
<CR><LF> 
+0

运行的应用程序是什么操作系统?它是Windows吗? – gbulmer 2012-04-11 17:16:11

+0

它是Windows 7. – markAnthopins 2012-04-11 17:17:16

+1

你在看文件“c:/python/python.xml”吗?在Windows上,一些C库执行回车/换行处理以使UNIX文件与Windows文件兼容。 Unix只使用一个字符进行行分隔(\ n),但Windows使用cr + lf。因此,两组处理(Java和Python)将一行分隔符扩展为两个是可能的 - – gbulmer 2012-04-11 17:20:52

回答

7

将文件模式从'w'更改为'wb',否则Python会将任何换行符('\n')转换为特定于平台的表示形式(适用于Windows的'\r\n')。二进制模式可以抑制这种转换。