Pesan ini sudah cukup lama, tapi saya rasa saya dapat berkontribusi pada masalah ini :
Pertama buat skrip bernama recodeifneeded :
#!/bin/bash
# Find the current encoding of the file
encoding=$(file -i "$2" | sed "s/.*charset=\(.*\)$/\1/")
if [ ! "$1" == "${encoding}" ]
then
# Encodings differ, we have to encode
echo "recoding from ${encoding} to $1 file : $2"
recode ${encoding}..$1 $2
fi
Anda dapat menggunakannya dengan cara ini :
recodeifneeded utf-8 file.txt
Jadi, jika Anda ingin menjalankannya secara rekursif dan mengubah semua pengkodean file *.txt menjadi (katakanlah) utf-8 :
find . -name "*.txt" -exec recodeifneeded utf-8 {} \;
Saya harap ini membantu.
Skrip ini, diadaptasi dari ide harrymc, yang mengkode ulang satu file secara kondisional (berdasarkan keberadaan karakter Skandinavia yang disandikan UTF-8 tertentu), tampaknya bekerja dengan baik untuk saya.
$ cat recode-to-utf8.sh
#!/bin/sh
# Recodes specified file to UTF-8, except if it seems to be UTF-8 already
result=`grep -c [åäöÅÄÖ] $1`
if [ "$result" -eq "0" ]
then
echo "Recoding $1 from ISO-8859-1 to UTF-8"
recode ISO-8859-1..UTF-8 $1 # overwrites file
else
echo "$1 was already UTF-8 (probably); skipping it"
fi
(File pemrosesan batch tentu saja merupakan masalah sederhana misalnya for f in *txt; do recode-to-utf8.sh $f; done
.)
Catatan :ini sepenuhnya tergantung pada file skrip itu sendiri menjadi UTF-8. Dan karena ini jelas merupakan solusi yang sangat terbatas yang cocok untuk jenis file apa yang kebetulan saya miliki, jangan ragu untuk menambahkan jawaban yang lebih baik yang memecahkan masalah dengan cara yang lebih umum.
UTF-8 memiliki aturan ketat tentang urutan byte mana yang valid. Artinya jika data bisa menjadi UTF-8, Anda akan jarang mendapatkan hasil positif palsu jika berasumsi bahwa itu adalah .
Jadi Anda dapat melakukan sesuatu seperti ini (dengan Python):
def convert_to_utf8(data):
try:
data.decode('UTF-8')
return data # was already UTF-8
except UnicodeError:
return data.decode('ISO-8859-1').encode('UTF-8')
Dalam skrip shell, Anda dapat menggunakan iconv
untuk melakukan konversi, tetapi Anda memerlukan alat untuk mendeteksi UTF-8. Salah satu caranya adalah dengan menggunakan iconv
dengan UTF-8 sebagai penyandian sumber dan tujuan. Jika file tersebut valid UTF-8, keluarannya akan sama dengan masukan.