web-dev-qa-db-ja.com

エンコード用にファイルをバッチ変換する

コマンドまたはツールを使用して、エンコーディング内のディレクトリ(ANSI-> UTF-8など)にあるファイルをバッチ変換するにはどうすればよいですか?

単一ファイルの場合、エディターは役立ちますが、大容量ファイルの作業を行う方法は?

46
desolat

Cygwin または GnuWin32iconvdos2unix(および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」が使用されていることは珍しくありません。 。

36
quack quixote

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
}
29
akira

改行に関するウィキペディアのページには 変換ユーティリティ に関するセクションがあります。

これは、Windowsに同梱されているツールのみを使用した変換に最適です。

TYPE unix_file | FIND "" /V > dos_file
6
user4358

自動検出を備えた、findを使用したOneliner

一致するすべてのテキストファイルの文字エンコードが自動的に検出され、一致するすべてのテキストファイルが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 については、ここをクリックしてください。

3

TFCast は、バッチモードをサポートするWindows用のUnicodeコンバーターです。私は有料版を使用していて、それにかなり慣れています。

UTFCastは、マウスをクリックするだけですべてのテキストファイルをUTFエンコーディングに一括変換できるUnicodeコンバーターです。これを使用して、元のファイルのディレクトリ構造を維持しながら、テキストファイルでいっぱいのディレクトリをUTF-8、UTF-16、UTF-32などのUTFエンコーディングに変換して出力ディレクトリに変換できます。テキストファイルの拡張子が異なっていても問題ありません。UTFCastはテキストファイルを自動的に検出して変換します。

3
Tiler

iconv -f original_charset -t utf-8 originalfile > newfile

上記のコマンドをforループで実行します。

1
Aneesh Garg

これを使用Pythonスクリプト: https://github.com/goerz/convert_encoding.py どのプラットフォームでも機能します。Python = 2.7。

1
kinORnirvana

EncodingMaster を使用できます。これは無料で、Windows、Linux、Mac OS Xのバージョンがあり、非常にうまく動作します。

0
Francisco Vera

私のユースケースでは、自動入力エンコーディング検出が必要でしたが、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' -- {} \;
0
Bedla

有る dos2unix UNIX。
Windowsには別の同様のツールがありました( ここに別の参照 )。

UnixとWindowsのテキストファイルをどのように変換しますか? いくつかのトリックがあります

0
nik