2012-04-11 8 views
7

Una aplicación Java envía un XML a una aplicación Python. Ambos están en la misma máquina. Cuando abro el archivo recibido, puedo ver líneas adicionales (debido a CR adicionales). ¿Cuál podría ser la razón de ésto?Python agrega un CR adicional al final de las líneas recibidas

Este es el receptor:

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 

Este es el remitente:

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

Este es el archivo original:

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

Ésta es la recibió:

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

¿En qué sistema operativo se ejecutan las aplicaciones? ¿Es Windows? – gbulmer

+0

es Windows 7. – markAnthopins

+1

¿Está mirando el archivo "c: /python/python.xml"? En Windows, algunas de las bibliotecas C realizan el proceso de retorno de carro/avance de línea para hacer que los archivos UNIX sean compatibles con los archivos de Windows. Unix solo usa un caracter para la separación de línea (\ n), pero Windows usa cr + lf. Entonces, es casi posible que dos conjuntos de procesamiento (Java y Python) estén expandiendo un separador de línea a dos, – gbulmer

Respuesta

7

Cambie el modo de archivo de 'w' a 'wb', de lo contrario, Python convierte las nuevas líneas ('\n') en la representación específica de la plataforma ('\r\n' para Windows). El modo binario suprime esta conversión.

Cuestiones relacionadas