为什么 SQL Management Studio 在另存为 csv 时输出空分隔字符?
-
03-07-2019 - |
题
可以配置让它不发生吗?
我通常发现自己将查询结果保存为 .csv 并稍后在我的 Unix 机器上处理它。字符被空分隔使我必须过滤这些字符,这有点痛苦。
所以,这些是问题:
- 为什么会这样呢?
编辑:
因为它默认以 UTF-16 输出。最简单的转换是:
iconv -f utf-16 -t utf-8 origFile.csv > newFile.csv
- 可以以某种方式禁用它吗?如何?
这是由此生成的文件的十六进制转储的一部分。每个炭都是无效的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.|
解决方案
文件以 Unicode 而非 ASCII 格式输出。Unicode 使用两倍的位数来表示每个字符,因此前面有 00。
可能有一个选项可以保存为 ANSI 或 ASCII,这应该使用 8 位字符。
其他提示
我知道这是一篇旧帖子...但对于新访客...
当您从 Microsoft SQL Management Studio 保存数据时,您会注意到“保存”按钮旁边有一个小箭头。如果您选择小箭头,您可以选择“使用编码保存...”,这将允许您选择所需的编码。
在 Unix 上,我建议使用 iconv -futf-16le -tutf-8
过滤你的输出。:-)
不隶属于 StackOverflow