Cómo solucionar los caracteres chinos corruptos después de convertir JSON a CSV
Los caracteres chinos corruptos después de convertir JSON a CSV suelen tener como causa raíz una incompatibilidad de codificación: al exportar se escribe con la codificación predeterminada del sistema, pero Excel interpreta los bytes UTF-8 como GBK. La solución es primero confirmar que la codificación de exportación sea UTF-8 y luego hacer que Excel la reconozca correctamente.
La forma más sencilla es añadir un BOM UTF-8 (marca de orden de bytes) al CSV; cuando Excel lo detecta, lo abre automáticamente como UTF-8. Si usas una herramienta que se ejecuta localmente en el navegador, normalmente podrás marcarlo en las opciones de exportación.
Por qué aparecen los caracteres corruptos
El CSV en sí es texto plano y no contiene una declaración de codificación. Que el chino se muestre correctamente depende de si el lado que escribe y el lado que lee usan la misma codificación.
Si el lado que escribe lo guarda como UTF-8 y el lado que lee lo interpreta como GBK, aparecerán «锟斤拷» o una serie de signos de interrogación. Lo contrario también produce caracteres corruptos.
También hay un caso en el que los datos en sí están bien, pero Excel adivina mal la codificación al abrir el archivo con doble clic. Si se lee con el Bloc de notas o con código, se ve normal; esto es un problema de visualización, no una corrupción de datos.
Cómo solucionar los caracteres chinos corruptos después de convertir JSON a CSV
Revisa en el siguiente orden; en la mayoría de los casos se resuelve en los dos primeros pasos.
- Confirma que la codificación de exportación sea UTF-8. En las opciones de exportación busca «codificación» o «Encoding» y selecciona UTF-8. Si solo puedes elegir «UTF-8 with BOM», priorízala.
- Añade BOM. Si se exportó como UTF-8 sin BOM, guarda de nuevo con un editor de texto como «UTF-8 con BOM», o haz que la herramienta exporte directamente una versión con BOM.
- Ábrelo usando el método de importación. En Excel, ve a «Datos - Desde texto/CSV» y selecciona manualmente la codificación UTF-8, en lugar de hacer doble clic en el archivo.
- Comprueba la codificación del JSON original. La especificación JSON exige UTF-8, pero algunas API devuelven flujos de bytes codificados en GBK. Primero confirma la codificación de los datos de origen y luego decide el método de conversión.
- Confirma que no queden escapes residuales en los valores de los campos. Cuando el chino se escribe como
\u4e2d\u6587y otros escapes Unicode, hay que decodificarlo antes de exportar; de lo contrario, se mostrará como literal.
Después de gestionar la codificación, si el CSV sigue mostrándose mal, abre el archivo con un visor hexadecimal y comprueba si los primeros tres bytes son EF BB BF. Si lo son, significa que el BOM ya se escribió.
Cómo convertir JSON a CSV
El proceso básico consta de tres pasos: leer el JSON, aplanar la estructura y escribir el CSV.
JSON permite objetos y arrays anidados; CSV solo admite una tabla bidimensional. Por eso, el primer paso es expandir los niveles anidados en nombres de columna. Por ejemplo, {"user":{"name":"张三"}} se convierte en el nombre de columna user.name.
El enfoque habitual es:
- Tratar cada objeto del array JSON como una fila.
- Recorrer todos los objetos y recopilar todas las claves que hayan aparecido como encabezados.
- Rellenar las claves faltantes con una cadena vacía para mantener las columnas alineadas.
- Cuando un valor contenga comas, comillas o saltos de línea, envolverlo entre comillas dobles y escapar las comillas internas.
Puedes encontrar herramientas que se ejecutan localmente en el navegador en /tools; los datos no se suben a un servidor. Consulta la página específica de la herramienta en Herramienta JSON a CSV.
Diferencias entre JSON y CSV
Entender las diferencias te ayuda a juzgar qué se perderá en la conversión.
- Estructura: JSON admite objetos y arrays anidados; CSV solo admite tablas planas bidimensionales.
- Tipos: JSON tiene tipos como cadena, número, booleano y null; CSV es todo texto.
- Codificación: la especificación JSON exige UTF-8; CSV no lo impone.
- Tamaño: JSON, al incluir nombres de claves y llaves, suele ser más grande que un CSV equivalente.
- Uso: JSON es adecuado para transmisión por API; CSV es adecuado para visualización en tablas e importación masiva.
El coste de la conversión es que la información anidada se aplana. Los campos de tipo array normalmente se serializan como una cadena JSON dentro de la celda, o se dividen en varias filas.
Procesamiento de archivos grandes al convertir JSON a CSV
Cuando el archivo supera varias decenas de megabytes, leerlo todo en memoria puede bloquear fácilmente la pestaña del navegador.
Una estrategia más estable es el procesamiento en streaming: leer por bloques y escribir por líneas. Así, el uso de memoria solo depende del tamaño de una línea y no crece con el archivo.
Además, ten en cuenta varios puntos:
- Haz un primer escaneo para recopilar todas las claves y evitar que aparezcan claves nuevas después y desalineen las columnas.
- Al exportar archivos grandes, desactiva la vista previa en tiempo real para reducir la carga de renderizado.
- Exportar por lotes a varios CSV es más fácil de abrir que un único archivo enorme.
- Si la memoria del navegador sigue siendo insuficiente, usa herramientas de línea de comandos.
Las herramientas que se ejecutan localmente en el navegador están limitadas por la memoria de la pestaña al procesar archivos grandes; esto lo determina el entorno, no es un defecto de la herramienta. Si el archivo es demasiado grande, se recomienda cambiar a un script local.
Depuración de API al convertir JSON a CSV
Al depurar una API, a menudo es necesario convertir rápidamente el JSON devuelto en una tabla para verificar los campos.
En este caso, lo importante es conservar la estructura original y no apresurarse a aplanarla. Primero guarda la respuesta como un archivo .json, confirma la codificación y la integridad, y luego conviértela.
Algunos hábitos prácticos:
- Al guardar la respuesta, usa explícitamente UTF-8 para evitar que se reescriba por el camino.
- Primero mira si el nivel superior es un objeto o un array. Si es un objeto único, primero envuélvelo en un array antes de convertir.
- Presta atención a los campos de paginación para no convertir solo una página de datos.
- Cuando los nombres de campo contengan puntos o corchetes, cuidado con los conflictos de nombres de columna.
Después de la conversión, compara los nombres de columna con la documentación de la API; así podrás detectar rápidamente campos faltantes o cambios de nombre.
JSON a CSV en el móvil sin instalación
Al procesar JSON en el móvil, instalar una app suele ser más engorroso que usar una página web.
Las herramientas que se ejecutan localmente en el navegador también funcionan en el móvil, no requieren instalar ninguna aplicación y no dependen de subir datos por red. Abre la página, pega o selecciona el archivo y exporta.
Las limitaciones en el móvil están principalmente en la memoria y el selector de archivos. No se recomienda procesar archivos muy grandes en el móvil. Después de exportar, puedes abrirlo con una aplicación de hojas de cálculo; si aparecen caracteres corruptos, revisa también primero la codificación.
Preguntas frecuentes
¿Qué hacer si después de añadir BOM siguen apareciendo caracteres corruptos?
Primero confirma que el BOM realmente se haya escrito; usa un visor hexadecimal para ver si el inicio es EF BB BF. Si ya está escrito y aun así hay caracteres corruptos, significa que el problema no está en el BOM, sino en la codificación del origen de datos. Vuelve al origen del JSON y confirma si es UTF-8.
Se abre bien con el Bloc de notas, pero con Excel se ve corrupto
Esto indica que los datos están bien y que Excel adivinó mal la codificación. Usa «Datos - Desde texto/CSV» para importar y especifica manualmente UTF-8, en lugar de hacer doble clic en el archivo.
El chino se convierte en formas como \u4e2d\u6587
Esto es una secuencia de escape Unicode, no caracteres corruptos. Hay que decodificarla antes de la conversión, restaurar el escape a caracteres reales y luego escribir el CSV.
El campo de tipo array se convierte en una cadena JSON
Esto es normal. CSV no tiene tipo array; solo puede serializar el array como una cadena y colocarlo en la celda. Si necesitas expandirlo, tendrás que dividirlo manualmente en varias filas.
Después de la conversión hay más filas
Lo más probable es que los campos de tipo array se hayan expandido en varias filas. Revisa cómo se tratan los arrays en la configuración de conversión y elige entre «serializar como cadena» o «expandir en varias filas».
Conclusión
Los caracteres chinos corruptos básicamente se pueden resolver unificando la codificación; prioriza UTF-8 con BOM. La respuesta a cómo solucionar los caracteres chinos corruptos después de convertir JSON a CSV es, en esencia, hacer que el lado que escribe y el lado que lee usen la misma codificación, y que Excel sepa cuál debe usar. Al elegir herramientas, prioriza las que se ejecutan localmente en el navegador: los datos no salen del equipo y tanto la depuración como la conversión son más seguras.