【问题标题】:Why iconv command output to the same file is truncated?为什么 iconv 命令输出到同一文件被截断?
【发布时间】:2013-07-26 04:32:28
【问题描述】:

现在我有一些需要转换为 utf-8 编码的 euc-jp 编码文件。 所以我在 bash 中使用了 iconv 命令:

iconv foo.c -f euc-jp -t utf-8 -o foo.c

但是出现了一个问题,它说:

/usr/bin/iconv: 30211位置的非法输入序列

文件被截断到一定大小(32~33KB)。

但令人困惑的是,如果我使用

iconv foo.c -f euc-jp -t utf-8               # output to STDOUT
iconv foo.c -f euc-jp -t utf-8 -o foo.c.utf8 # output to a new file

效果很好。

所以我猜这可能与 BUFFER 有关,有人可以解释一下吗?

【问题讨论】:

    标签: c linux bash iconv


    【解决方案1】:

    在没有同步的情况下读取和写入同一个文件?不,这不是一个好主意。文件会乱七八糟的。

    为了不损害数据并且不产生垃圾,试试这个:

    cp foo.c temp.input; iconv temp.input -f euc-jp -t utf-8 -o foo.c;rm temp.input;
    

    【讨论】:

      【解决方案2】:

      输入和输出使用同一个文件不是一个好主意。您无法确定操作例程(在本例中为 iconv)如何使用这些文件。

      【讨论】:

      • 根据程序的不同,它甚至可能会一直运行以尝试创建无限大小的文件。
      【解决方案3】:

      写入您正在读取的文件会导致问题吗?真是惊喜!

      查看iconv 是否有一些命令行可以内联工作,或者写入 tmp 输出文件并在完成后复制回原始文件。

      【讨论】:

        【解决方案4】:

        它正在覆盖它也试图从中读取的文件。如果转换后的形式比原来的长,输出会赶上输入,然后它会尝试转换它已经转换的内容。

        令人惊讶的是它完全有效。大多数程序在写入之前会截断其输出文件,因此不会有任何内容可供读取。

        【讨论】:

          猜你喜欢
          • 2015-07-21
          • 1970-01-01
          • 2013-10-12
          • 1970-01-01
          • 1970-01-01
          • 2011-08-20
          • 1970-01-01
          • 2016-10-10
          相关资源
          最近更新 更多