代码之家  ›  专栏  ›  技术社区  ›  Vinko Vrsalovic

为什么SQL Management Studio在保存为csv时输出空分隔字符?

  •  1
  • Vinko Vrsalovic  · 技术社区  · 16 年前

    它能被配置为不发生吗?

    我通常会发现自己将一个查询的结果保存为.csv,并稍后在我的Unix机器上进行处理。字符是空分隔的,这让我不得不过滤这些字符,这有点痛苦。

    所以,这些问题是:

    • 为什么会这样?

    编辑:

    因为它默认输出为UTF-16。最简单的转换将是:

    iconv -f utf-16 -t utf-8 origFile.csv > newFile.csv
    
    • 它能不能以某种方式被禁用?怎么用?

    这里是这样生成的文件的十六进制转储的一部分。每个字符后跟一个 空字符(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.|
    
    3 回复  |  直到 15 年前
        1
  •  6
  •   David Wengier    16 年前

    正在以Unicode而不是ASCII输出文件。Unicode使用两倍多的位来表示每个字符,因此前面的00位。

    可能有一个保存为ansi或ascii的选项,它应该使用8位字符。

        2
  •  2
  •   Leigh S    15 年前

    我知道这是一个旧的帖子……但是对于新的访问者……

    当您从Microsoft SQL Management Studio保存数据时,您会注意到“保存”按钮旁边有一个小箭头。如果选择小箭头,可以选择“用编码保存…”,这将允许您选择所需的编码。

        3
  •  1
  •   C. K. Young    16 年前

    在Unix上,我建议使用 iconv -futf-16le -tutf-8 过滤你的输出。-)