GNU/Linux >> Belajar Linux >  >> Linux

Batch mengonversi penyandian dalam file

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

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

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

Atau dalam bentuk temukan-semua-dan-taklukkan:

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

Atau:

## 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 atas pertanyaan terkait, CesarB menyebutkan:

Ada beberapa pengkodean yang disebut "ANSI" di Windows. Faktanya, ANSI adalah nama yang salah. iconv tidak dapat menebak mana yang Anda inginkan.

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

Halaman yang ditautkannya memberikan informasi sejarah ini (dikutip dari Microsoft PDF) tentang asal-usul CP 1252 dan ISO-8859-1, penyandian lain yang sering digunakan:

[...] ini berasal dari fakta bahwa halaman kode Windows 1252 awalnya didasarkan pada draf ANSI, yang menjadi Standar ISO 8859-1. Namun, dalam menambahkan poin kode ke kisaran yang dicadangkan untuk kode kontrol dalam standar ISO, halaman kode Windows 1252 dan halaman kode Windows berikutnya yang awalnya didasarkan pada seri ISO 8859-x menyimpang dari ISO. Hingga hari ini, tidak jarang komunitas pengembang, 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 .


Dengan PowerShell Anda dapat melakukan hal seperti ini:

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

Sementara ENC adalah sesuatu seperti unicode , ascii , utf8 , dan utf32 . Lihat 'file bantuan'.

Untuk mengonversi semua file *.txt dalam direktori ke UTF-8, lakukan hal seperti ini:

foreach($i in ls -name DIR/*.txt) { \
    Get-Content DIR/$i | \
    Out-File -encoding utf8 -filepath DIR2/$i \
}

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

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
}

Halaman Wikipedia pada baris baru memiliki bagian tentang utilitas konversi.

Tampaknya ini taruhan terbaik Anda untuk konversi hanya menggunakan alat yang disertakan dengan Windows:

TYPE unix_file | FIND "" /V > dos_file

Linux
  1. Encoding File Zip?

  2. Batch Ubah Nama File Menjadi Penomoran Berurutan?

  3. Hapus pembaruan Windows yang diunduh

  1. Sembunyikan file tersembunyi Linux di Windows

  2. Konversi banyak file BMP ke JPEG di Linux

  3. Ubah ujung garis Unix ke Windows

  1. Cara Mengonversi File ke Encoding UTF-8 di Linux

  2. Mengapa file EXE Windows tidak berfungsi di Linux?

  3. Apa perbedaan antara file .txt Linux dan Windows (pengodean Unicode)