Saya memiliki file di UTF-8 yang berisi teks dalam berbagai bahasa. Banyak dari itu adalah nama orang. Saya perlu mengubahnya menjadi ASCII dan saya perlu hasilnya agar terlihat layak.
Ada banyak cara bagaimana pendekatan mengkonversi dari pengkodean yang lebih luas ke yang lebih sempit. Transformasi paling sederhana adalah mengganti semua karakter non-ASCII dengan placeholder, seperti '_'. Jika saya tahu bahasa file yang ditulis, ada kemungkinan tambahan, seperti romanisasi.
Apa alat Unix atau pustaka bahasa pemrograman yang tersedia di Unix dapat memberi saya konversi (upaya terbaik) yang layak dari UTF-8 ke ASCII?
Sebagian besar teks dalam bahasa Eropa, jenis bahasa latin.
character-encoding
text
natural-language
pengguna7610
sumber
sumber
iconv
dantr
, ada Unidecode . Saya tidak terbiasa dengan itu, tetapi mungkin melakukan apa yang Anda inginkan, jika Anda dapat menggunakan Python.Jawaban:
Ini akan melakukan konversi upaya terbaik, tergantung pada tabel konversi. Jika Anda tahu tentang bahasa input, ada filter khusus bahasa yang memberikan hasil yang lebih baik, misalnya
adalah konversi Esperanto ke representasi x-metodo,
akan mencoba melakukan representasi TeX dari diakritik, ada parameter khusus bahasa:
akan mentransliterasikan "ä" ke "ae" (biasa untuk bahasa Jerman) alih-alih polos "a"
akan menggunakan aturan Polandia untuk transliterasi Rusia, bukan yang "seperti Inggris", dll ...
sumber
konwert
situs web? Apakah dikemas di mana saja? github.com/taw/konwert/tree/master/konwert-1.8Ini akan bekerja untuk beberapa hal:
echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLIT
kembalihelloe ?
. Karakter apaiconv
pun yang tidak tahu cara mengonversi akan diganti dengan tanda tanya.iconv
POSIX, tapi saya tidak tahu apakah semua sistem memilikiTRANSLIT
opsi. Ini bekerja untuk saya di Linux. Selain itu,IGNORE
opsi akan secara diam-diam membuang karakter yang tidak dapat direpresentasikan dalam set karakter target (lihatman iconv_open
).Opsi yang lebih rendah tetapi kompatibel dengan POSIX adalah untuk digunakan
tr
. Perintah ini menggantikan semua poin kode non-ASCII dengan tanda tanya. Bunyinya teks UTF-8 satu byte pada suatu waktu. "É" dapat diganti denganE?
atau?
, tergantung pada apakah itu disandikan menggunakan aksen kombinasi atau karakter yang sudah dikomposisi sebelumnya.Contoh itu kembali
caf? ?????
, menggunakan karakter yang sudah dikomposisi sebelumnya.sumber
tr
tidak dimaksudkan untuk bekerja satu byte pada suatu waktu. GNU tr memang, tapi ini bug.iconv -f utf-8 -t ascii//TRANSLIT
bekerja dengan baik untuk saya. Itu mengubah tanda kutip menjadi tanda kutip lurus. Terima kasih.//TRANSLIT
juga berfungsi untuk set karakter lain, misalnyaiso-8859-1//TRANSLIT
.iconv
memberiiconv: illegal input sequence at position 1234
dan memotong file untuk saya. Alangkah baiknya jika itu hanya menghapus karakter dan mencoba mengambil urutan lagi.mencoba
uni2ascii -B input.txt >output.txt
uni2ascii
sumber
Maksud Anda, Anda ingin dapat mengubah nama-nama berikut menjadi beberapa string ASCII yang tidak akan ditolak orang yang bersangkutan?
Saya curiga tidak ada alat otomatis yang dapat melakukan ini. Mungkin tidak ada atau sangat banyak Latinizations nama pribadi. Perangkat lunak tidak dapat memilih versi yang dapat diterima secara budaya. Setidaknya bukan tanpa perangkat lunak mengetahui banyak tentang budaya orang yang terlibat.
Lihat juga /programming//a/1398403/477035
sumber
perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")'
menghasilkan `` bd llh lthny bn lHsyn` yang merupakan transliterasi yang cukup baik untuk tujuan saya.Saya akhirnya menggunakan Perl dengan Text :: Unidecode untuk ini. Contoh:
menghasilkan
bd llh lthny bn lHsyn
, yang merupakan hasil yang dapat diterima untuk tujuan saya.sumber