Perché SQL Management Studio genera caratteri nulli separati durante il salvataggio come CSV?

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

  •  03-07-2019
  •  | 
  •  

Domanda

e può essere configurato per non accadere?

Di solito mi ritrovo a salvare un risultato di una query come .csv e ad elaborarlo in seguito sul mio computer Unix. I caratteri che sono separati da null mi fanno filtrare quei caratteri ed è un po 'una seccatura.

Quindi, queste sono le domande:

  • Perché è così?

EDIT:

Perché viene emesso in UTF-16 per impostazione predefinita. La conversione più semplice sarebbe quindi:

iconv -f utf-16 -t utf-8 origFile.csv > newFile.csv
  • Può essere disabilitato in qualche modo? Come?

Ecco una parte di un hexdump di un file così generato. Ogni carattere è seguito da a null 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.|
È stato utile?

Soluzione

Il file viene emesso in Unicode, non ASCII. Unicode utilizza il doppio del numero di bit per rappresentare ciascun carattere, quindi i precedenti 00.

Potrebbe esserci un'opzione per salvare come ANSI o ASCII, che dovrebbe usare caratteri a 8 bit.

Altri suggerimenti

So che questo è un vecchio post ... ma per i nuovi visitatori ...

Quando stai salvando i dati da Microsoft SQL Management Studio, noterai che il pulsante 'Salva' ha una piccola freccia accanto ad esso. Se selezioni la piccola freccia puoi selezionare "Salva con codifica ..." questo ti permetterà di selezionare la codifica che desideri.

Su Unix, suggerisco l'uso di iconv -futf-16le -tutf-8 per filtrare i tuoi output. : -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top