Почему SQL Management Studio выводит символы, разделенные нулем, при сохранении в формате csv?
-
03-07-2019 - |
Вопрос
и можно ли это настроить так, чтобы этого не происходило?
Обычно я обнаруживаю, что сохраняю результат запроса в формате .csv и обрабатываю его позже на своей машине Unix.Символы, разделенные нулем, заставляют меня фильтровать эти символы, и это немного утомительно.
Итак, вот какие вопросы:
- Почему это так?
Редактировать:
Потому что по умолчанию он выводит в формате UTF-16.Тогда самым простым преобразованием было бы:
iconv -f utf-16 -t utf-8 origFile.csv > newFile.csv
- Можно ли это как-то отключить?Каким образом?
Вот фрагмент шестнадцатеричного дампа сгенерированного таким образом файла.За каждым символом следует символ null (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.|
Решение
Файл выводится в формате Unicode, а не ASCII.Unicode использует в два раза больше битов для представления каждого символа, отсюда и предыдущие 00.
Возможно, есть возможность сохранить как ANSI или ASCII, которые должны использовать 8-битные символы.
Другие советы
Я знаю, что это старый пост ... но для новых посетителей...
Когда вы сохраняете данные из Microsoft SQL Management Studio, вы заметите, что рядом с кнопкой "Сохранить" есть маленькая стрелка.Если вы нажмете на маленькую стрелочку, вы можете выбрать "Сохранить с кодировкой ...", это позволит вам выбрать нужную вам кодировку.
В Unix я предлагаю использовать iconv -futf-16le -tutf-8
чтобы отфильтровать ваши выходные данные.:-)