2012-04-11 3 views
7

Eine Java-Anwendung sendet ein XML an eine Python-Anwendung. Sie sind beide auf der gleichen Maschine. Wenn ich die empfangene Datei öffne, kann ich zusätzliche Zeilen sehen (wegen zusätzlicher CRs). Was könnte der Grund dafür sein?Python fügt ein zusätzliches CR am Ende der empfangenen Zeilen hinzu

Dies ist der Empfänger:

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 

Dies ist der Absender ist:

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

Dies ist die ursprüngliche Datei:

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

Dies ist erhalten:

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

Auf welchem ​​Betriebssystem laufen die Anwendungen? Ist es Windows? – gbulmer

+0

ist es Windows 7. – markAnthopins

+1

Schaust du dir die Datei "c: /python/python.xml" an? Unter Windows führen einige der C-Bibliotheken eine Carriage-Return/Line-Feed-Verarbeitung durch, um UNIX-Dateien mit Windows-Dateien kompatibel zu machen. Unix verwendet nur ein Zeichen für die Zeilentrennung (\ n), aber Windows verwendet cr + lf. Es ist also nur möglich, dass zwei Verarbeitungsgruppen (Java und Python) ein Zeilentrennzeichen auf zwei erweitern: – gbulmer

Antwort

7

Ändern Sie den Dateimodus von 'w' zu 'wb', sonst konvertiert Python alle Zeilenumbrüche ('\n') in die plattformspezifische Darstellung ('\r\n' für Windows). Der Binärmodus unterdrückt diese Konvertierung.

Verwandte Themen