【问题标题】:\377\376 Appended to file (Windows -> Unix)\377\376 附加到文件(Windows -> Unix)
【发布时间】:2012-09-17 15:21:00
【问题描述】:

我有一个执行以下操作的 SSIS 包。

  1. 运行 SQL 脚本
  2. 将结果导出到平面文件(UTF-8 编码,; 分隔,\n 用于换行)
  3. FTP 结果到 solaris 机器(二进制格式)

问题是,当文件显示在我的 solaris 盒子上时,文件开头有以下内容。

\377\376

我已经尝试过dos2unix,但仍然没有解决这个问题。实际上它把\377\376改为\227\226,不是很有帮助。

我的问题,有什么方法可以从我的文件中删除这些字符?当他们在那里时,他们会使用 grep 和其他 unix 工具,例如 head。

【问题讨论】:

  • 这是一个 utf-16-le BOM (en.wikipedia.org/wiki/Byte_order_mark#UTF-16),所以在导出选项中查看是否可以省略 BOM 或在 solaris 上使用 bom 感知查看器?
  • 这是一个 Unicode 字节顺序标记。看起来你的输出毕竟不是 UTF-8。
  • 谢谢,我知道从哪里开始寻找。我将看看将输出编码更改为 US-ASCII 是否有帮助(我知道我的输入中没有特殊字符)。

标签: character-encoding ssis solaris dos2unix


【解决方案1】:

默认情况下,任何 SSIS 或 windows 编码文件都是 UCS-2-LITTLE-ENDIAN 编码的。最简单的方法是使用以下命令在您的 unix 服务器上对文件进行编码。

  1. 使用 iconv 切换到 UTF-8(或您需要的任何编码)

    iconv -f UCS-2-LITTLE-EDIAN -t UTF-8 输入 > 输出

  2. 删除 ms 添加到留置权末尾的回车。

    unix2dos -ascii utf-8-file 输出文件

【讨论】:

    【解决方案2】:

    Dos2unix 6.0 及更高版本可以将 Windows Unicode UTF-16 文件转换为 Unix UTF-8。它还将删除字节顺序标记 (BOM)。获取latest dos2unix here

    有可用的 Windows 版本。

    【讨论】:

      【解决方案3】:

      正如预览答案所述,使用dos2unix 完成了这项工作,就我而言,我使用的是:

      dos2unix.exe -r -v -f -D utf8 <FileName>
      

      其中:

      -r, --remove-bom 删除字节顺序标记(默认)

      -v, --verbose 详细操作

      -f, --force 强制转换二进制文件

      -D,--display-enc 设置显示文本信息编码 ansi, unicode, utf8, 默认为ansi

      BOM 字符已被删除

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多