コマンドまたはツールを使用して、エンコーディング内のディレクトリ(ANSI-> UTF-8など)にあるファイルをバッチ変換するにはどうすればよいですか?
単一ファイルの場合、エディターは役立ちますが、大容量ファイルの作業を行う方法は?
Cygwin または GnuWin32iconv
や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エンコーディングとして使用するもの」を意味します。これは、システムで使用されるデフォルトの非Unicodeエンコーディングです(したがって、通常はテキストファイルに使用されるものです)。
彼がリンクしているページは、CP 1252およびISO-8859-1の起源に関するこの歴史的な一口( a Microsoft PDF から引用)を提供しています。
[...]これは、Windowsコードページ1252が元々ANSIドラフトに基づいていたため、ISO規格8859-1になりました。ただし、ISO規格の制御コード用に予約されている範囲にコードポイントを追加すると、Windowsコードページ1252以降、元々ISO 8859-xシリーズに基づいたWindowsコードページがISOから逸脱しました。今日まで、Microsoft内外の開発コミュニティが8859-1コードページをWindows 1252と混同し、Windowsコードページのサポートを示すために「ANSI」または「A」が使用されていることは珍しくありません。 。
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 \
}
これにより、DIR2に各.txtファイルの変換されたバージョンが作成されます。
編集:すべてのサブディレクトリのファイルを置き換えるには、次のコマンドを使用します。
% foreach($i in ls -recurse -filter "*.Java") {
$temp = get-content $i.fullname
out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
改行に関するウィキペディアのページには 変換ユーティリティ に関するセクションがあります。
これは、Windowsに同梱されているツールのみを使用した変換に最適です。
TYPE unix_file | FIND "" /V > dos_file
一致するすべてのテキストファイルの文字エンコードが自動的に検出され、一致するすべてのテキストファイルが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
コマンドは、このようなファイル管理の自動化に非常に役立ちます。
more find
galore については、ここをクリックしてください。
TFCast は、バッチモードをサポートするWindows用のUnicodeコンバーターです。私は有料版を使用していて、それにかなり慣れています。
UTFCastは、マウスをクリックするだけですべてのテキストファイルをUTFエンコーディングに一括変換できるUnicodeコンバーターです。これを使用して、元のファイルのディレクトリ構造を維持しながら、テキストファイルでいっぱいのディレクトリをUTF-8、UTF-16、UTF-32などのUTFエンコーディングに変換して出力ディレクトリに変換できます。テキストファイルの拡張子が異なっていても問題ありません。UTFCastはテキストファイルを自動的に検出して変換します。
iconv -f original_charset -t utf-8 originalfile > newfile
上記のコマンドをforループで実行します。
これを使用Pythonスクリプト: https://github.com/goerz/convert_encoding.py どのプラットフォームでも機能します。Python = 2.7。
EncodingMaster を使用できます。これは無料で、Windows、Linux、Mac OS Xのバージョンがあり、非常にうまく動作します。
私のユースケースでは、自動入力エンコーディング検出が必要でしたが、Windows-1250
エンコード、そのコマンドfile -bi <FILE>
戻り値 charset=unknown-8bit
。これはiconv
の有効なパラメーターではありません。
enca で最高の結果が得られました。
txt拡張子を持つすべてのファイルをutf-8に変換します
find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;
有る dos2unix
UNIX。
Windowsには別の同様のツールがありました( ここに別の参照 )。
UnixとWindowsのテキストファイルをどのように変換しますか? いくつかのトリックがあります