2012-04-11 22 views
7

Aplikacja Java wysyła XML do aplikacji Python. Oboje znajdują się na tej samej maszynie. Po otwarciu otrzymanego pliku widzę dodatkowe linie (z powodu dodatkowych CR). Co mogłoby być tego przyczyną?Python dodaje dodatkową CR na końcu odebranych linii

Jest to odbiornik:

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 

To nadawca:

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

Oryginalny plik:

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

To jest odbierany:

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

Jakim systemem operacyjnym są uruchomione aplikacje? Czy to okna? – gbulmer

+0

to system Windows 7. – markAnthopins

+1

Szukasz pliku "c: /python/python.xml"? W oknach niektóre biblioteki C obsługują przetwarzanie powrotne/line-feed, aby pliki UNIX były kompatybilne z plikami Windows. Unix używa tylko jednego znaku do separacji linii (\ n), ale Windows używa cr + lf. Jest więc możliwe, że dwa zestawy przetwarzania (Java i Python) rozszerzają jeden separator linii na dwa, – gbulmer

Odpowiedz

7

Zmień kod pliku z 'w' na 'wb', w przeciwnym razie Python przekształci wszystkie nowe linie ('\n') w reprezentację specyficzną dla platformy ('\r\n' dla systemu Windows). Tryb binarny wyłącza tę konwersję.