¿Por qué SQL Management Studio genera caracteres nulos separados cuando se guarda como csv?

StackOverflow https://stackoverflow.com/questions/208027

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Y puede configurarse para que no suceda?

Normalmente me encuentro guardando un resultado de una consulta como .csv y procesándolo más tarde en mi máquina Unix. Los caracteres que están separados por nulos me obligan a filtrar esos caracteres y es un poco molesto.

Entonces, estas son las preguntas:

  • ¿Por qué esto es así?

EDITAR:

Porque se imprime en UTF-16 por defecto. La conversión más fácil sería:

iconv -f utf-16 -t utf-8 origFile.csv > newFile.csv
  • ¿Se puede desactivar de alguna manera? ¿Cómo?

Aquí hay una parte de un volcado hexadecimal de un archivo así generado. A cada personaje le sigue una nulo char (00):

00000cf0  36 00 36 00 32 00 0d 00  0a 00 36 00 38 00 34 00  |6.6.2.....6.8.4.|
00000d00  30 00 36 00 32 00 31 00  36 00 0d 00 0a 00 36 00  |0.6.2.1.6.....6.|
00000d10  38 00 34 00 30 00 36 00  33 00 36 00 34 00 0d 00  |8.4.0.6.3.6.4...|
00000d20  0a 00 36 00 38 00 34 00  30 00 36 00 38 00 34 00  |..6.8.4.0.6.8.4.|
00000d30  32 00 0d 00 0a 00 36 00  38 00 34 00 30 00 37 00  |2.....6.8.4.0.7.|
00000d40  30 00 32 00 31 00 0d 00  0a 00 36 00 38 00 34 00  |0.2.1.....6.8.4.|
00000d50  30 00 37 00 37 00 39 00  37 00 0d 00 0a 00 36 00  |0.7.7.9.7.....6.|
00000d60  38 00 34 00 30 00 37 00  39 00 32 00 31 00 0d 00  |8.4.0.7.9.2.1...|
00000d70  0a 00 36 00 38 00 34 00  30 00 38 00 32 00 34 00  |..6.8.4.0.8.2.4.|
00000d80  31 00 0d 00 0a 00 36 00  38 00 34 00 30 00 38 00  |1.....6.8.4.0.8.|
00000d90  36 00 36 00 31 00 0d 00  0a 00 36 00 38 00 34 00  |6.6.1.....6.8.4.|
00000da0  30 00 38 00 37 00 35 00  31 00 0d 00 0a 00 36 00  |0.8.7.5.1.....6.|
00000db0  38 00 34 00 31 00 30 00  32 00 35 00 34 00 0d 00  |8.4.1.0.2.5.4...|
00000dc0  0a 00 36 00 38 00 34 00  31 00 30 00 34 00 34 00  |..6.8.4.1.0.4.4.|
¿Fue útil?

Solución

El archivo se genera en Unicode, no en ASCII. Unicode utiliza el doble de bits para representar cada carácter, por lo tanto, los 00 anteriores.

Puede haber una opción para guardar como ANSI o ASCII, que debe usar caracteres de 8 bits.

Otros consejos

Sé que esta es una publicación antigua ... pero para los nuevos visitantes ...

Cuando esté guardando datos de Microsoft SQL Management Studio, notará que el botón 'Guardar' tiene una pequeña flecha al lado. Si selecciona la pequeña flecha, puede seleccionar "Guardar con codificación ...", lo que le permitirá seleccionar la codificación que desee.

En Unix, sugiero el uso de iconv -futf-16le -tutf-8 para filtrar su salida. :-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top