2 votos

¿Por qué debo volver a guardar un archivo desde Mac para que funcione?

Tengo un problema para el que tengo una solución. Espero eliminar la solución para mejorar la eficiencia de la producción.

El servidor de mi asociado ejecuta automáticamente un script que da salida a un gran archivo de datos de investigación (todo texto) en un json y lo guarda como un enorme (4MB+) .json archivo.

Recupero este archivo vía ftp. Tengo entendido que el software de ftp (Fetch) me entrega el archivo tal y como se ha guardado.

Cuando intento procesar el contenido del archivo (desde el Terminal) usando un script de Python, recibo este error:

Traceback (most recent call last):
  File "/Users/me/Documents/client drop folders/client1/pythonScript.py", line 61, in <module>
    sourceData = json.loads(line.decode("utf-8"))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 2547902: invalid continuation byte

El carácter en esta posición es un espacio - aunque esto parece discutible, considerando mi solución:

Mi solución es simplemente abrir el archivo y volver a guardarlo (ya sea usando el diálogo de guardado estándar de VSCode o simplemente usando el TextEdit de mi Mac y eligiendo guardar con utf-8 y una codificación de caracteres .json ) y sobrescribiendo el archivo.

El archivo Python procesa el json sin errores después de este re-guardado del archivo fuente.

Si corro file -I sourceFile.json en el guardado antes de volver a guardarlo, entonces produce:

sourceFile.json: text/plain; charset=utf-8

Después de volver a guardar, el mismo comando de Terminal produce lo mismo:

sourceFile.json: text/plain; charset=utf-8

¿Por qué el archivo tiene un rendimiento diferente antes y después de volver a guardarlo?

Agradecería cualquier consejo o respuesta con conocimiento de causa. ¿Existe algún método de resolución de problemas mejor que el Terminal file -I ¿comando?

Gracias de antemano.


Apéndices:

salida diff:

1c1
< (entire content of file 1 from server)
\ No newline at end of file
---
> (entire content of file 2 saved on Mac)
\ No newline at end of file

salida del cmp:

old/file.json new/file.json differ: char 2547903, line 1

2voto

nielsv Puntos 71

Parece que el problema era que el archivo de origen era efectivamente no guardado con codificación utf-8, a pesar de lo que file -I indicado. Pude examinar el php script que produjo el original json y también fue capaz de pasar el texto a través de la php función utf8_encode para resolver el problema.

Si otros en este foro están teniendo dificultades similares, recomiendo encarecidamente la lectura de los comentarios de la pregunta inicial, ya que proporcionan buenas herramientas de solución de problemas y consejos.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X