it-swarm.asia

Mengkonversi file besar untuk penyandian

Bagaimana saya bisa mengonversi file secara batch dalam direktori untuk penyandiannya (mis. ANSI-> UTF-8) dengan perintah atau alat?

Untuk file tunggal editor membantu, tetapi bagaimana melakukan pekerjaan file massal?

46
desolat

Cygwin atau GnuWin32 menyediakan alat Unix seperti iconv dan dos2unix (dan unix2dos). Di bawah Unix/Linux/Cygwin, Anda akan ingin menggunakan "windows-1252" sebagai penyandian alih-alih ANSI (lihat di bawah). (Kecuali Anda tahu sistem Anda menggunakan codepage selain 1252 sebagai codepage default, dalam hal ini Anda harus memberi tahu iconv codepage yang tepat untuk diterjemahkan dari.)

Konversikan dari satu (-f) ke yang lain (-t) dengan:

$ iconv -f windows-1252 -t utf-8 infile > outfile

Atau dalam bentuk find-all-and-conquer:

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

Kalau tidak:

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

Pertanyaan ini telah ditanyakan berkali-kali di situs ini, jadi inilah beberapa informasi tambahan tentang "ANSI". Dalam jawaban untuk pertanyaan terkait, CesarB menyebutkan :

Ada beberapa penyandian yang disebut "ANSI" di Windows. Bahkan, ANSI kelir . iconv tidak memiliki cara menebak yang Anda inginkan.

Pengkodean ANSI adalah pengodean yang digunakan oleh fungsi "A" di Windows API (fungsi "W" menggunakan UTF-16). Penyandian yang sesuai biasanya tergantung pada bahasa sistem Windows Anda. Yang paling umum adalah CP 1252 (juga dikenal sebagai Windows-1252). Jadi, ketika editor Anda mengatakan ANSI, artinya "apa pun fungsi API yang digunakan sebagai pengodean ANSI default", yang merupakan pengodean non-Unicode default yang digunakan dalam sistem Anda (dan dengan demikian biasanya yang digunakan untuk file teks).

Halaman yang dia tautkan untuk memberikan berita gembira historis ini (dikutip dari a Microsoft PDF ) tentang asal-usul CP 1252 dan ISO-8859-1, pengkodean lain yang sering digunakan:

[...] ini berasal dari fakta bahwa kode Windows halaman 1252 pada awalnya didasarkan pada konsep ANSI, yang menjadi ISO Standar 8859-1. Namun, dalam menambahkan poin kode ke rentang yang disediakan untuk kode kontrol dalam standar ISO, halaman kode Windows 1252 dan halaman kode Windows berikutnya yang semula didasarkan pada seri ISO 8859-x yang menyimpang dari ISO. Hingga hari ini, tidak jarang komunitas pengembangan, baik di dalam maupun di luar Microsoft, mengacaukan halaman kode 8859-1 dengan Windows 1252, serta melihat "ANSI" atau "A" yang digunakan untuk menandakan dukungan halaman kode Windows .

36
quack quixote

dengan powershell Anda dapat melakukan sesuatu seperti ini:

%  get-content IN.txt | out-file -encoding ENC -filepath OUT.txt

sedangkan ENC adalah sesuatu seperti unicode, ascii, utf8, utf32. checkout 'help out-file'.

untuk mengonversi semua file * .txt dalam direktori ke utf8 lakukan sesuatu seperti ini:

% foreach($i in ls -name DIR/*.txt) { \
       get-content DIR/$i | \
       out-file -encoding utf8 -filepath DIR2/$i \
  }

yang membuat versi yang dikonversi dari setiap file .txt di DIR2.

EDIT: Untuk mengganti file di semua subdirektori gunakan:

% foreach($i in ls -recurse -filter "*.Java") {
    $temp = get-content $i.fullname
    out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
28
akira

Halaman Wikipedia pada baris baru memiliki bagian tentang tilitas konversi .

Ini tampaknya taruhan terbaik Anda untuk konversi dengan hanya menggunakan alat yang dikirimkan Windows dengan:

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

TFCast adalah konverter Unicode untuk Windows yang mendukung mode batch. Saya menggunakan versi berbayar dan cukup nyaman dengan itu.

UTFCast adalah konverter Unicode yang memungkinkan Anda mengonversi semua file teks menjadi pengkodean UTF hanya dengan satu klik mouse Anda. Anda dapat menggunakannya untuk mengonversi direktori yang penuh dengan file teks ke pengkodean UTF termasuk UTF-8, UTF-16 dan UTF-32 ke direktori output, sambil mempertahankan struktur direktori dari file asli. Bahkan tidak masalah jika file teks Anda memiliki ekstensi yang berbeda, UTFCast dapat secara otomatis mendeteksi file teks dan mengonversinya.

3
Tiler

Oneliner menggunakan find, dengan deteksi otomatis

Pengkodean karakter dari semua file teks yang cocok terdeteksi secara otomatis dan semua yang cocok file teks dikonversi ke utf-8 encoding:

$ 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"' -- {} \;

Untuk melakukan langkah-langkah ini, sub Shell sh digunakan dengan -exec, menjalankan one-liner dengan flag -c, dan meneruskan nama file sebagai argumen posisi "$1" dengan -- {}. Di antaranya, file output utf-8 untuk sementara waktu bernama converted.

Perintah find sangat berguna untuk otomatisasi manajemen file seperti itu.

Klik di sini untuk selengkapnya find galore .

2
Serge Stroobandt

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

jalankan perintah di atas untuk loop.

1
Aneesh Garg

Anda dapat menggunakan EncodingMaster . Ini gratis, memiliki versi Windows, Linux dan Mac OS X dan berfungsi dengan sangat baik.

0
Francisco Vera

Dalam use-case saya, saya membutuhkan deteksi pengkodean input otomatis dan ada banyak file dengan encoding Windows-1250, yang perintahnya file -bi <FILE> mengembalikan charset=unknown-8bit. Ini bukan parameter yang valid untuk iconv.

Saya mendapatkan hasil terbaik dengan enca .

Konversi semua file dengan ekstensi txt ke utf-8

find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;
0
Bedla

Gunakan skrip Python ini: https://github.com/goerz/convert_encoding.py Ia bekerja pada platform apa pun. Membutuhkan Python 2.7.

0
kinORnirvana

Ada dos2unix di unix.
Ada alat serupa lainnya untuk Windows ( ref lain di sini ).

Bagaimana saya mengkonversi antara file teks Unix dan Windows? memiliki beberapa trik lagi

0
nik