Pourquoi SQL Management Studio génère-t-il des caractères séparés par zéro lors de l'enregistrement en tant que csv?

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

  •  03-07-2019
  •  | 
  •  

Question

et peut-il être configuré pour ne pas arriver?

Je me retrouve généralement en train de sauvegarder le résultat d'une requête au format .csv et de le traiter ultérieurement sur ma machine Unix. Les caractères étant séparés par des caractères nuls, je dois filtrer ces caractères et c'est un peu pénible.

Alors, voici les questions:

  • Pourquoi est-ce ainsi?

EDIT:

Parce qu’il sort en UTF-16 par défaut. La conversion la plus facile serait alors:

iconv -f utf-16 -t utf-8 origFile.csv > newFile.csv
  • Peut-il être désactivé d'une manière ou d'une autre? Comment?

Voici une partie d'un fichier hexadécimal d'un fichier ainsi généré. Chaque personnage est suivi d'un Caractère nul (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.|
Était-ce utile?

La solution

Le fichier est sorti en Unicode, pas en ASCII. Unicode utilise deux fois plus de bits pour représenter chaque caractère, d’où les 00 précédents.

Il pourrait y avoir une option pour enregistrer au format ANSI ou ASCII, qui devrait utiliser des caractères de 8 bits.

Autres conseils

Je sais que c'est un ancien message ... mais pour les nouveaux visiteurs ...

Lorsque vous enregistrez des données à partir de Microsoft SQL Management Studio, vous remarquerez que le bouton "Enregistrer" est associé à une petite flèche. Si vous sélectionnez la petite flèche, vous pouvez sélectionner "Enregistrer avec codage ..." pour sélectionner le codage souhaité.

Sous Unix, je suggère l’utilisation de iconv -futf-16le -tutf-8 pour filtrer votre sortie. : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top