Pengkodean karakter didukung oleh lebih banyak, cat dan kurang

18

Saya memiliki file teks yang disandikan sebagai berikut sesuai dengan file:

Teks ISO-8859, dengan terminator garis CRLF

File ini berisi teks bahasa Prancis dengan aksen. Shell saya dapat menampilkan aksen dan emacsdalam mode konsol mampu menampilkan aksen ini dengan benar.

Masalah saya adalah itu more, catdan lessalat tidak menampilkan file ini dengan benar. Saya kira itu berarti alat-alat ini tidak mendukung rangkaian pengodean karakter ini. Apakah ini benar? Apa penyandian karakter yang didukung oleh alat ini?

Manuel Selva
sumber

Jawaban:

17

Shell Anda dapat menampilkan aksen dll karena mungkin menggunakan UTF-8. Karena file yang dimaksud adalah penyandian yang berbeda, less moredan catmencoba untuk membacanya sebagai UTF dan gagal. Anda dapat memeriksa penyandian saat ini dengan

echo $LANG

Anda memiliki dua pilihan, Anda dapat mengubah penyandian default, atau mengubah file menjadi UTF-8. Untuk mengubah penyandian Anda, buka terminal dan ketik

export LANG="fr_FR.ISO-8859"

Sebagai contoh:

$ echo $LANG 
en_US.UTF-8
$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ export LANG="fr_FR.ISO-8859"
$ xterm <-- open a new terminal 
$ cat foo.txt 
J'ai mal à la tête, c'est chiant!

Jika Anda menggunakan gnome-terminalatau serupa, Anda mungkin perlu mengaktifkan pengkodean, misalnya untuk terminatorklik kanan dan:

masukkan deskripsi gambar di sini

Untuk gnome-terminal:

masukkan deskripsi gambar di sini

Pilihan Anda yang lain (lebih baik) adalah mengubah penyandian file:

$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ iconv -f ISO-8859-1 -t UTF-8  foo.txt > bar.txt
$ cat bar.txt 
J'ai mal à la tête, c'est chiant!
terdon
sumber
4

Penyandian karakter ISO-8858 agak ketinggalan jaman untuk sistem Linux. Seluruh sistem Linux Anda kemungkinan menggunakan UTF-8 sepenuhnya. Termasuk emulator terminal Anda dan shell Anda.

Namun. cat, grepdan lesstidak melakukan transformasi penyandian, mereka akan memperlakukan file ISO-8859 / latin1 Anda sebagai UTF-8, yang tidak akan berfungsi.

Jika emacs dapat menampilkannya, itu karena ia mencoba untuk secara otomatis mendeteksi pengkodean yang digunakan dan tampaknya berhasil. Beritahu emacs untuk menyimpan file sebagai UTF-8 dan Anda akan dapat menggunakan cat/ grep/ apa pun di atasnya.

Jika Anda tahu pengkodean karakter yang tepat (ISO-8859 adalah kumpulan dari mereka, Anda harus tahu yang tepat: ISO-8859-1 atau ISO-8859-15 atau lebih buruk), Anda juga dapat mengonversi file Anda dari baris perintah :

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8
BatchyX
sumber
2

Cat, Semakin Banyak dan Kurang hanya melakukan tugas mereka menampilkan file. Menerjemahkan di antara pengodean tidak ada dalam uraian tugasnya. Pengkodean baris baru tidak menjadi masalah karena CRLF ditampilkan seperti garis normal yang mengakhiri LF, tetapi terminal Anda mungkin mengharapkan teks yang dikodekan UTF-8, yang merupakan standar de facto saat ini.

Luit menerjemahkan antara penyandian yang didukung dan UTF-8. Anda memberi tahu Luit pengkodean mana yang akan diterjemahkan dengan mengatur LC_CTYPEvariabel lingkungan atau dengan -encodingopsi. Misalnya, untuk menampilkan file latin-1 (alias ISO 8859-1):

LC_CTYPE=en_US luit less somefile
luit -encoding ISO8859-1 less somefile

Jika file dalam beberapa penyandian eksotis yang tidak didukung Luit, Anda dapat mengirimkannya melalui program penerjemah. Iconv mendukung banyak penyandian.

iconv -f latin1 somefile
iconv -f latin1 somefile | less
Gilles 'SANGAT berhenti menjadi jahat'
sumber