Saya sering menemukan file teks (seperti file subtitle dalam bahasa ibu saya, Persia ) dengan masalah pengkodean karakter. File-file ini dibuat pada Windows, dan disimpan dengan pengkodean yang tidak cocok (tampaknya ANSI), yang terlihat omong kosong dan tidak dapat dibaca, seperti ini:
Di Windows, orang dapat memperbaikinya dengan mudah menggunakan Notepad ++ untuk mengkonversi pengkodean ke UTF-8, seperti di bawah ini:
Dan hasil yang dapat dibaca adalah seperti ini:
Saya telah mencari banyak solusi serupa di GNU / Linux, tetapi sayangnya solusi yang disarankan (mis. Pertanyaan ini ) tidak berfungsi. Yang paling penting, saya telah melihat orang-orang menyarankan iconv
dan recode
tetapi saya tidak beruntung dengan alat-alat ini. Saya telah menguji banyak perintah, termasuk yang berikut, dan semuanya gagal:
$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt
Tidak ada yang berhasil!
Saya menggunakan Ubuntu-14.04 dan saya sedang mencari solusi sederhana (baik GUI atau CLI) yang berfungsi seperti halnya Notepad ++.
Salah satu aspek penting dari menjadi "sederhana" adalah bahwa pengguna tidak diharuskan untuk menentukan pengkodean sumber; alih-alih pengkodean sumber harus secara otomatis dideteksi oleh alat dan hanya pengodean target yang harus disediakan oleh pengguna. Namun demikian, saya juga akan senang mengetahui tentang solusi yang membutuhkan sumber pengkodean untuk disediakan.
Jika seseorang memerlukan test case untuk memeriksa solusi yang berbeda, contoh di atas dapat diakses melalui tautan ini .
vim '+set fileencoding=utf-8' '+wq' file.txt
.iso-639
tetapi itu tampaknya tidak tersedia dalam salah satuiconv
ataurecode
. Setidaknya, saya tidak melihatnya di keluaraniconv -l
.vim
tetapi tidak berhasil.Jawaban:
File Windows ini dengan teks Persia dikodekan dalam Windows-1256 . Jadi bisa diuraikan dengan perintah yang mirip dengan OP yang dicoba, tetapi dengan rangkaian karakter yang berbeda. Yaitu:
recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(dikecam atas keluhan poster asli; lihat komentar)
Yang ini mengasumsikan bahwa variabel lingkungan LANG diatur ke lokal UTF-8. Untuk mengkonversi ke pengkodean apa pun (UTF-8 atau yang lain), terlepas dari lokal saat ini, orang dapat mengatakan:
Poster asli juga bingung dengan semantik alat pengodean ulang teks (recode, iconv). Untuk pengkodean sumber ( source
..
atau -f) seseorang harus menentukan pengkodean dengan mana file disimpan (oleh program yang membuatnya). Tidak beberapa tebakan (naif) berdasarkan karakter mojibake dalam program yang mencoba (tetapi gagal) untuk membacanya. Mencoba ISO-8859-15 atau WINDOWS-1252 untuk teks Persia jelas merupakan jalan buntu: pengodean ini tidak mengandung huruf Persia.sumber
iconv
) bekerja. Tetapi yang pertama (menggunakanrecode
) tidak bekerja dengan benar dan output masih omong kosong. Edit jawaban Anda hanya untuk memasukkaniconv
perintah dan saya akan menandainya sebagai jawabannya.iconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txt
yang saya uji dan bekerja. Jadi mungkin ide yang baik untuk mengedit perintah Anda seperti ini.Selain itu
iconv
, yang merupakan alat yang sangat berguna baik sendiri atau dalam skrip, ada solusi yang sangat sederhana yang saya temukan mencoba untuk mencari tahu masalah yang sama untuk rangkaian karakter Yunani (Windows-1253 + ISO-8859-7).Yang perlu Anda lakukan adalah membuka file teks melalui dialog "Open" Gedit dan bukan dengan mengklik dua kali . Di bagian bawah kotak dialog ada drop-down untuk Pengkodean, yang diatur ke "Terdeteksi Secara Otomatis" . Ubah ke "Windows-125x" atau kumpulan kode lain yang sesuai dan teks akan dapat dibaca dengan sempurna di Gedit. Anda kemudian dapat menyimpannya menggunakan pengkodean UTF-8, hanya untuk memastikan Anda tidak akan memiliki masalah yang sama lagi di masa depan ...
sumber
Sebagai solusi pelengkap untuk masalah ini, saya telah menyiapkan skrip Bash yang berguna berdasarkan
iconv
perintah dari jawaban Incnis Mrsi :Simpan skrip ini sebagai
fix-encoding.sh
, berikan izin eksekusi menggunakanchmod +x fix-encoding.sh
dan gunakan seperti ini:Skrip ini akan mencoba memperbaiki penyandian sejumlah file yang disediakan sebagai input. Perhatikan bahwa file akan diperbaiki di tempat, sehingga konten akan ditimpa.
sumber
Saya tidak tahu apakah ini bekerja dengan Farsi: Saya menggunakan Gedit, ini memberikan kesalahan dengan pengkodean yang salah, dan saya dapat memilih apa yang ingin saya terjemahkan ke UTF-8, itu hanya teks yang tidak menyala format, tapi di sini ada tangkapan layar !
Maaf saya akhirnya dapat melalui file teks saya, jadi sekarang semuanya sudah dikonversi.
Saya juga menyukai notepad ++, masih ketinggalan.
sumber
Jika Anda suka bekerja di GUI daripada CLI, seperti yang saya lakukan:
sumber
Solusi kerja yang saya temukan adalah menggunakan editor teks Microsoft Visual Studio Code yang merupakan Freeware dan tersedia untuk Linux.
Buka file yang ingin Anda konversi enkode dalam VS-Code. Di bagian bawah jendela, ada beberapa tombol. Salah satunya terkait dengan pengkodean file, seperti yang ditunjukkan di bawah ini:
Mengklik tombol ini akan memunculkan menu overhead yang mencakup dua item. Dari menu ini pilih opsi "Buka kembali dengan Pengkodean", seperti di bawah ini:
Ini akan membuka menu lain yang mencakup daftar penyandian yang berbeda, seperti yang ditunjukkan di bawah ini. Sekarang pilih "Bahasa Arab (Windows 1256)":
Ini akan memperbaiki teks omong kosong seperti ini:
Sekarang klik lagi tombol encoding dan kali ini pilih opsi "Save with Encoding", seperti di bawah ini:
Dan di menu baru pilih opsi "UTF-8":
Ini akan menyimpan file yang diperbaiki menggunakan pengkodean UTF-8:
Selesai!
:)
sumber