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 に答える