Daha fazla, kedi ve daha azı tarafından desteklenen karakter kodlamaları


18

Aşağıdaki gibi kodlanmış bir metin dosyası var file:

ISO-8859 metni, CRLF satır sonlandırıcıları ile

Bu dosya aksanlı Fransızca metin içeriyor. Kabuğum aksanı görüntüleyebilir ve emacskonsol modunda bu aksanları doğru bir şekilde görüntüleyebilir.

Benim sorunum olduğunu more, catve lessaraçlar bu dosyayı doğru göstermez. Sanırım bu araçlar bu karakterlerin kodlama setini desteklemediği anlamına geliyor. Bu doğru mu? Bu araçlar tarafından desteklenen karakter kodlamaları nelerdir?

Yanıtlar:


17

Kabuğunuz aksanları vb. Gösterebilir çünkü muhtemelen UTF-8 kullanıyor. Söz konusu dosya farklı bir kodlama olduğundan less moreve catUTF olarak okumaya ve başarısız olmaya çalıştığından. Mevcut kodlamanızı aşağıdakilerle kontrol edebilirsiniz:

echo $LANG

İki seçeneğiniz vardır, varsayılan kodlamanızı değiştirebilir veya dosyayı UTF-8 olarak değiştirebilirsiniz. Kodlamanızı değiştirmek için bir terminal açın ve şunu yazın

export LANG="fr_FR.ISO-8859"

Örneğin:

$ 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!

Kullanıyorsanız gnome-terminalveya benzeri bir şey kullanıyorsanız , kodlamayı etkinleştirmeniz gerekebilir, örneğin terminatorsağ tıklama ve:

resim açıklamasını buraya girin

İçin gnome-terminal:

resim açıklamasını buraya girin

Diğer (daha iyi) seçeneğiniz dosyanın kodlamasını değiştirmektir:

$ 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!

4

ISO-8858 karakter kodlamaları Linux sistemleri için biraz modası geçmiş. Tüm Linux sisteminiz muhtemelen UTF-8 kullanıyor. Terminal emülatörünüz ve kabuğunuz da dahil.

Ancak. cat, grepVe lessherhangi bir kodlama dönüşümünü yapmıyoruz, bunlar hangi işi olmaz, UTF-8 olarak ISO-8859 / latin1 dosyasını ele alacağız.

Emacs bunları görüntüleyebiliyorsa, bunun nedeni kullanılan kodlamayı otomatik olarak algılamaya ve görünüşte başarılı olmaya çalışmasıdır. Emacs'a dosyayı UTF-8 olarak kaydetmesini söyleyin ve cat/ grep/ üzerinde ne varsa kullanabilirsiniz.

Tam karakter kodlamasını biliyorsanız (ISO-8859 bunların bir koleksiyonudur, tam olanı bilmeniz gerekir: ISO-8859-1 veya ISO-8859-15 veya daha kötüsü), dosyalarınızı komut satırından da dönüştürebilirsiniz. :

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8

2

Cat, More and Less sadece dosyayı görüntüleme işini yapıyor. Kodlamalar arasında çeviri yapmak iş tanımlarında yer almaz. Yeni satırların kodlanması bir sorun değildir çünkü CRLF, normal LF ile biten satır gibi görüntülenir, ancak terminaliniz muhtemelen bugünlerde fiili standart olan UTF-8 kodlu metin beklemektedir.

Luit , desteklenen kodlamalar ve UTF-8 arasında çeviri yapar. Luit'e LC_CTYPEortam değişkenini ayarlayarak veya -encodingseçenekle hangi kodlamanın çevrileceğini söylersiniz . Örneğin, bir latin-1 (diğer adıyla ISO 8859-1) dosyasını görüntülemek için:

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

Dosya Luit'in desteklemediği egzotik bir kodlama içindeyse, bir çevirmen programından geçebilirsiniz. Iconv birçok kodlamayı destekler.

iconv -f latin1 somefile
iconv -f latin1 somefile | less
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.