Bir dosyanın UTF-8 olup olmadığını öğrenmek için bir Linux komutu var mı?


14

Joomla .inidosyalarının UTF-8 olarak kaydedilmesi gerekir.

Düzenledikten sonra dosyaların UTF-8 olup olmadığından emin değilim.

Bir Linux komutu fileveya bir dosyanın gerçekten UTF-8 olup olmadığını söyleyen birkaç komut var mı?


4
Bir dosyanın kodlamasını söyleyemezsiniz. Sadece akıllı bir tahminde bulunabilirsiniz. Çoğunlukla doğru tahmin edebilirsiniz, ancak bazen tahminler başarısız olur. fileakıllı tahminler yapan bir program örneğidir.
Marco

1
@Marco: Bununla birlikte, geçerli UTF-8 olup olmadığını doğrulamak mümkündür. Orada bazı yanlışlıkla geçerli UTF-8 olarak geçebilir kodlamalar, ama neredeyse hiç ISO-8859-𝒏 veya Windows-125𝒏 kodlamaları / charsets ile olur.
user1686

Yanıtlar:


28

Dosya kodlamasını aşağıdaki komutla belirleyebilirsiniz:

file -bi filename

3
@nicolas MacOS için deneyebilirsiniz file -I filename(-I büyük harf i).
Rik

5
Bu dosyanın tamamını okuyor mu?
ctrl-alt-delor

2
@ kojow7 utf-8'in başlığı yok. Saf ASCII (sadece 7 bit), utf-8'den ayırt edilemez (bu nokta, bir başlık her türlü soruna neden olur). Bu nedenle, ilk MB için ASCII olan bir dosyanız varsa, tek bir UTF-8 karakterine sahipseniz, tüm dosyayı okumadığınız sürece bilmezsiniz.
ctrl-alt-delor

3
Bu cevap olarak kabul edilmemelidir. 'File' komutu bunu yapmaz; dosyanın sadece bir bölümünü okur ve en iyi tahminde bulunmak için sihirli sayılar kullanır. Bazen 'dosya' size yanlış cevap verebilir ve verecektir. Bir dosyanın ascii, iso-8859-1, utf-8 gibi bir kodlamayı geçip geçmediğini doğrulamak için iyi bir çözüm 'iconv' komutunu kullanmaktır.
Tim

1
Test ettim ve başarısız olabilir.
Tim

9

@davidpostill Merak ediyorum, referansta yazar alıntı yapmak kötü bir uygulama mı?
Pablo Olmos de Aguilera

Hayır. Ancak, bağlantının beni nereye götürdüğünü söylemesini sağlamak iyi bir uygulamadır. Sadece mavi metni okuduğumu varsayın. Düzenlemeden sonra, neden ve ne zaman tıklamam gerektiğini söyleyebilirim. Daha önce yapamadım. (Düzenlemeyi yapan ben değildim ama bunun hakkında olduğundan% 94 eminim.)
Hermann Döppes

Güzel ve güzel çalışıyor find -type f -exec isutf8 {} +, çünkü dosya adını da gösteriyor. (Ve find ... -exec ... +kullanımı da hızlıdır)
Tomasz Gandor

2

fileKomutu kullanmayın . Tüm dosyayı denetlemez ve temel olarak tahmin eder. Bazen yanlış cevaplar verir.

Bir dosyanın şu şekilde UTF-8 kodlamasını geçip geçmediğini doğrulayabilirsiniz:

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

Sıfır dönüş kodu UTF8'i geçtiğini gösterir. Sıfır olmayan bir dönüş kodu, geçerli UTF8 olmadığı anlamına gelir.

İse mümkün değildir , bazı kodlama şemaları üst üste gibi bir dosya zorunlu olarak herhangi bir kodlama şeması kullanılarak ihraç bilmek. Bunu yapmak için meta verilerin dosyaya gömülmesi gerekir ve o zaman bile dosyayı kendiniz doğrulamak yerine bu dosyayı oluşturan kişiye güvenirsiniz ... ve her zaman kendiniz doğrulamanız gerekir.


0

Yine başka bir yol da recodeUTF-8 kodunu çözmeye çalışır ve geçersiz karakterlerle karşılaşırsa bir hata ile çıkmasıdır.

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
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.