3

现在我有一些需要转换为 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有关,有人可以向我解释一下吗?

4

4 回答 4

4

在没有同步的情况下读取和写入同一个文件?不,这不是一个好主意。该文件将被弄乱。

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

cp foo.c temp.input; iconv temp.input -f euc-jp -t utf-8 -o foo.c;rm temp.input;
于 2013-07-26T03:26:33.603 回答
2

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

于 2013-07-26T03:18:36.277 回答
2

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

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

于 2013-07-26T03:18:53.323 回答
1

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

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

于 2013-07-26T03:19:44.907 回答