linux – ファイル内のエンコーディングをバッチ変換する

batch encoding linux macos windows

ディレクトリ内のファイルのエンコーディング(ANSI → UTF-8など)をコマンドやツールで一括変換するにはどうすればいいですか?

単一ファイルの場合はエディタが役立ちますが、大量ファイルのジョブを行うにはどうすればいいですか?

  49  desolat  2009-08-21


ベストアンサー

CygwinGnuWin32iconvdos2unix (および 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 {} \> {} \;

Alternatively:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;

この質問はこのサイトでも何度も質問されているので、ここでは「ANSI」について補足しておきます。関連する質問への回答の中で、CesarBが言及しています

Windowsでは「ANSI」と呼ばれるエンコーディングがいくつかあります。実際には、ANSI は誤記です

ANSI エンコーディングは、Windows API の “A” 関数で使用されるエンコーディングです ( “W” 関数は UTF-16 を使用します)。どのエンコーディングに対応するかは、通常、お使いのWindowsシステム言語に依存します。最も一般的なのは CP 1252 (Windows-1252 としても知られています) です。つまり、エディタがANSIと言った場合、それは「API関数がデフォルトのANSIエンコーディングとして使用しているものは何でも」という意味になります

彼がリンクしているページでは、CP 1252とISO-8859-1の起源に関する歴史的な豆知識(a Microsoft PDFから引用)を提供しています

これは、Windows コード ページ 1252 がもともと ANSI ドラフトに基づいていたという事実に由来しています。しかし、ISO 規格の制御コード用に予約されている範囲にコードポイントを追加することで、Windows コードページ 1252 とそれに続く Windows コードページは、もともと ISO 8859-x シリーズに基づいて ISO から逸脱していました。今日に至るまで、マイクロソフトの内外を問わず、開発コミュニティが 8859-1 コードページを Windows 1252 と混同したり、Windows コードページのサポートを示すために “ANSI” または “A” が使用されているのを見たりすることは珍しくありません

38  quack quixote  2009-09-30


PowerShellで、こんなことができます

Get-Content IN.txt | Out-File -encoding ENC -filepath OUT.txt

ENC は unicode, ascii, utf8, utf32 のようなものです。help out-file’を調べてみてください

ディレクトリ内のすべての*.txtファイルをUTF-8に変換するには、次のようにします

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  2010-02-26


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

これは、Windowsが出荷しているツールのみを使用して変換するための最善の策のように思われます

TYPE unix_file | FIND "" /V > dos_file

5  None  2009-08-21


UTFCastはバッチモードに対応したWindows用のUnicodeコンバータです。私は有料版を使っていますが、かなり快適に使えています

UTFCastは、バッチであなたのマウスをクリックするだけでUTFエンコーディングにすべてのテキストファイルを変換することができますUnicodeコンバータです。元のファイルのディレクトリ構造を維持しながら、UTF-8、UTF-16およびUTF-32を含むUTFエンコーディングにテキストファイルの完全なディレクトリを変換するためにそれを使用することができます。それはあなたのテキストファイルが別の拡張子を持っている場合でも問題ではありません、UTFCastは自動的にテキストファイルを検出し、それらを変換することができます

3  Tiler  2011-12-06


自動検出機能を備えたファインダを使用したオネライナー

マッチするすべてのテキストファイルの文字エンコーディングが自動的に検出され、マッチするすべてのテキストファイルが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があります

3  Serge Stroobandt  2016-08-28


このPythonスクリプトを使います。https://github.com/goerz/convert_encoding.py どのプラットフォームでも動作します。Python 2.7が必要です

1  kinORnirvana  2018-07-01


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

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

1  Aneesh Garg  2014-06-06


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

1  Bedla  2018-09-16


ConvertZもバッチ変換のためのWindows GUIツールです

  • big5, gbk, hz, shift-jis, jis, euc-jp, unicode big-endian, unicode little-endian, and utf-8:次のエンコーディングの間でファイル(プレーンテキスト)またはクリップボードの内容を変換します
  • バッチファイルの変換
  • 実際に変換する前に、ファイルの内容と変換結果をプレビューします
  • htmlドキュメントで指定されている場合、<Meta>タグの文字セットを自動更新する
  • 変換後のBig5/GBK文字の誤マップを自動修正
  • ファイル名のエンコーディングを big5, gbk, shift-jis, unicode のいずれかに変更する
  • big5, gbk, shift-jis, unicode, utf-8エンコーディングの中からMP3のID3やAPEを変換します
  • Oggタグをutf-8で繁体字中国語と簡体字中国語の間で変換します

代替ダウンロードリンク。https://www.softking.com.tw/download/1763/

ConvertZ file conversion interface

ConvertZ settings

0  phuclv  2020-08-19


Unix には dos2unix があります。Windows にも同様のツールがありました (別のリファレンスはこちら)

Unix と Windows の間でテキストファイルを変換するには?

0  nik  2009-08-21


CP Converter という名前のフリーでオープンソースのバッチエンコーディングコンバータがあります

CP Converter screenshot

0  MSS  2020-03-28


タイトルとURLをコピーしました