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?
-
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.|
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. : -)