コマンドまたはツールを使用して、エンコード(たとえばANSI-> UTF-8)のためにディレクトリ内のファイルをバッチ変換するにはどうすればよいですか?
単一ファイルの場合、エディターが役立ちますが、大量ファイルのジョブを実行するにはどうすればよいですか?
コマンドまたはツールを使用して、エンコード(たとえばANSI-> UTF-8)のためにディレクトリ内のファイルをバッチ変換するにはどうすればよいですか?
単一ファイルの場合、エディターが役立ちますが、大量ファイルのジョブを実行するにはどうすればよいですか?
回答:
CygwinまたはGnuWin32はiconv
、and dos2unix
(およびunix2dos
)のようなUnixツールを提供します。Unix / Linux / Cygwinでは、ANSIの代わりに「windows-1252」をエンコードとして使用する必要があります(以下を参照)。(システムがデフォルトのコードページとして1252以外のコードページを使用していることがわかっている場合を除き、この場合、変換元の正しいコードページをiconvに伝える必要があります。)
以下を使用して、一方(-f
)から他方()に変換-t
します。
$ iconv -f windows-1252 -t utf-8 infile > outfile
または、すべてを征服する形式で:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
代わりに:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
この質問はこのサイトで何度も聞かれているので、「ANSI」に関する追加情報があります。関連する質問への回答で、CesarBは次のように述べています。
Windowsには「ANSI」と呼ばれるいくつかのエンコーディングがあります。実際、 ANSIは誤った呼び名です。iconvには、必要なものを推測する方法はありません。
ANSIエンコーディングは、Windows APIの「A」関数で使用されるエンコーディングです(「W」関数はUTF-16を使用します)。通常、どのエンコーディングに対応するかは、Windowsシステム言語によって異なります。最も一般的なのはCP 1252(Windows-1252とも呼ばれます)です。したがって、エディターがANSIと言うとき、それは「API関数がデフォルトのANSIエンコーディングとして使用するものは何でも」を意味します。
彼がリンクしているページは、CP 1252とISO-8859-1の起源に関するこの歴史的な情報(Microsoft PDFから引用)を提供しています。
[...]これは、Windowsコードページ1252がもともとISO標準8859-1になったANSIドラフトに基づいていたという事実に由来しています。ただし、ISO標準の制御コード用に予約されている範囲にコードポイントを追加する場合、Windowsコードページ1252およびISO 8859-xシリーズに元々基づいている後続のWindowsコードページはISOから逸脱していました。今日まで、Microsoft内外の開発コミュニティが8859-1コードページをWindows 1252と混同し、Windowsコードページサポートを示すために使用される「ANSI」または「A」を参照することは珍しくありません。 。
iconv
ファイルがこのサイズを超えると、32,768バイトに切り捨てられるようです。読み込もうとしているファイルに書き込み中に、ファイルが十分に小さければジョブを実行します。そうでなければ、警告なしにファイルを切り捨てます...
PowerShellあなたはこのような何かを行うことができます。
% get-content IN.txt | out-file -encoding ENC -filepath OUT.txt
ENCはunicode、ascii、utf8、utf32のようなものです。checkout 'help out-file'。
ディレクトリ内のすべての* .txtファイルをutf8に変換するには、次のようにします。
% foreach($i in ls -name DIR/*.txt) { \
get-content DIR/$i | \
out-file -encoding utf8 -filepath DIR2/$i \
}
これにより、各.txtファイルの変換されたバージョンがDIR2に作成されます。
編集:すべてのサブディレクトリのファイルを置き換えるには、次を使用します。
% foreach($i in ls -recurse -filter "*.java") {
$temp = get-content $i.fullname
out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
UTFCastは、バッチモードをサポートするWindows用のUnicodeコンバーターです。有料版を使用していますが、非常に快適です。
UTFCastは、マウスをクリックするだけですべてのテキストファイルをUTFエンコーディングにバッチ変換できるUnicodeコンバーターです。これを使用して、元のファイルのディレクトリ構造を維持しながら、テキストファイルでいっぱいのディレクトリをUTF-8、UTF-16、UTF-32などのUTFエンコーディングに出力ディレクトリに変換できます。テキストファイルの拡張子が異なっていても問題ありません。UTFCastは自動的にテキストファイルを検出して変換できます。
一致するすべてのテキストファイルの文字エンコードが自動的に検出され、一致するすべてのテキストファイルがutf-8
エンコードに変換されます。
$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;
これらのステップを実行するために、サブシェルsh
で使用される-exec
と、ワンライナーを実行して、-c
フラグ、位置引数としてファイル名を渡す"$1"
と-- {}
。その間、utf-8
出力ファイルの名前は一時的にになりますconverted
。
このfind
コマンドは、このようなファイル管理の自動化に非常に役立ちます。
こちらをクリックして、よりfind
豊富。
次のPythonスクリプトを使用します:https : //github.com/goerz/convert_encoding.pyこれはどのプラットフォームでも動作します。Python 2.7が必要です。
EncodingMasterを使用できます。無料で、Windows、Linux、およびMac OS Xバージョンがあり、非常に良好に動作します。