2

ここで、テキスト ファイルのファイル名をファイルの最初の行に書き込む、非常に便利な perl を見つけました。OS X Yosemite のターミナルからこれを実行しています。

perl -i -pe 'BEGIN{undef $/;} s/^/\nFilename:$ARGV\n/' `find . -name '*.TXT'`

いくつかの変更により、特定の問題が解決したと思いましたが、ピックアップしているファイルはUTF-16LEであり、このコマンドがUTF-8で記述されており、出力が本当に混乱していることを発見しました(テキストは目に見えて正しいです)ただし、Excel、ファイルメーカーなどの計算では認識されません)。

何度か試行した後、このスクリプトでファイル名を UTF-16LE でファイルの先頭に書き込む方法について助けが必要です。(注:ファイルをUTF-8にバッチ変換してから実行するという回避策がありますが、このワークフローを1つのステップで実行することをお勧めします)。

4

1 に答える 1

1

reinierpost は正しかった - 元の Unicode バイト オーダー マーク (BOM) を削除することが目的でした。最終的に機能したのは次のとおりです。

perl -i -pe 'BEGIN{undef $/;} s/\xFF\xFE/Filename:$ARGV\n/' `find . -name '*.TXT'`

ここで、UTF-16LE BOM \xFF\xFE は新しい文字列に置き換えられます。参考までに、その他の BOM は次のとおりです。 - iso-10646-1 > \xFE\xFF - UTF-16BE > \xFE\xFF - UTF-8 > \xEF\xBB\xBF

新しいテキストをUTF-16LEに書き込むこともできました

perl -i -pe 'BEGIN{binmode STDIN,":encoding(utf8)";binmode STDOUT,":encoding(utf16)"; undef $/;} s/\xFF\xFE/\xFF\xFE\nFilename:$ARGV\n/' `find . -name '*.TXT'`

ただし、この最後のバージョンでは、新しいヘッダーとデータの間に文字の混合セットが作成されるため、ソース データは UTF8 と UTF16 の混合バッグであると考えています。私を正しい方向に導いてくれた reinierpost に感謝します。他の人がこれを改善できるかどうか、私は興味を持っています。

于 2015-12-05T03:14:42.593 に答える