现在我有一些需要转换为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有关,有人可以向我解释一下吗?
答案 0 :(得分:3)
在没有同步的情况下读取和写入同一个文件?不,这不是一个好主意。该文件将搞砸。
为了不损害数据并且不产生垃圾,请尝试:
cp foo.c temp.input; iconv temp.input -f euc-jp -t utf-8 -o foo.c;rm temp.input;
答案 1 :(得分:2)
写入您正在阅读的文件会导致问题吗?真是个惊喜!
查看iconv
是否有一些命令行可以内联工作,或者写入tmp输出文件并在完成后复制回原始文件。
答案 2 :(得分:1)
使用相同的文件进行输入和输出并不是一个好主意。您无法确定操作例程(在本例中为iconv)如何使用这些文件。
答案 3 :(得分:1)
它正在覆盖它也试图读取的文件。如果转换后的表单比原始表单长,输出将赶上输入,然后它将尝试转换它已经转换的内容。
令人惊讶的是它完全有效。大多数程序在写入之前截断它们的输出文件,因此没有任何东西可以从中读取。