2012-10-21 14 views
57

utf-8'de kodlanmış Arapça, İngilizce, Rusça dosyalarım var. Bir Perl script kullanarak bu dosyaları işlemek için çalışılıyor, bu hatayı alıyorum:Metin dosyasından olmayan UTF-8 karakterleri nasıl kaldırılır

Malformed UTF-8 character (fatal) 

Elle bu dosyaların içeriğini kontrol etmek, onlarda bazı garip karakterler bulundu. Şimdi bu karakterleri dosyalardan otomatik olarak kaldırmanın bir yolunu arıyorum.

Bunu yapmak için yine de var mı?

+2

Belki de bununla aynı: http://stackoverflow.com/questions/7656283/malformed-utf-8-character-fatal-error-while-parsing-xml-using-xmllibxml –

+2

Lütfen bu bağlantıya bakın: http://unix.stackexchange.com/questions/6516/filtering-invalid-utf8 – askmish

+3

UTF-8 olmayan karakterler nedir? İyi biçimlendirilmiş bir UTF-8 dizesindeki tüm karakterler UTF-8 (aslında Unicode) karakterlerdir! Bunlardan bazıları, birkaç ardışık baytta kodlanmış UTF-8'dir .... –

cevap

0

Sizin yönteminiz bayt byte okumalı ve karakterlerin bayt bilge yapısını tam olarak anlamalı ve takdir etmelidir. En basit yöntem, herhangi bir şey okuyacak ama sadece UTF-8 karakterlerini çıkaran bir editör kullanmaktır. Textpad bir seçimdir.

+0

iconv, cygwin'de mevcut değildir. Windows/cygwin'de bunu yapmanın bir yolu var mı? Geçersiz karakterler sırasını gerektiren büyük (100000 + satır) bir XML dosyasına sahibim. Geçerli utf-8 umrumda değil. Utf-8 için notepad ++ ayarladim, ama oradan da kaydedildikten sonra hala bir Mac üzerinde XML ayrıştırıcı – mljm

111

Bu komut:

iconv -f utf-8 -t utf-8 -c file.txt 

tüm geçersiz karakterler atlama, senin UTF-8 dosya temizler.

-f is the source format 
-t the target format 
-c skips any invalid sequence 
+10

"iconv -f utf-8 -t utf-8 -c file.txt" hatalarını alıyorum. 'f' ve '8' – Colin

+0

arasındaki tire Doğru, tireler gereklidir. Düzenleme için teşekkürler. Desteklenen kodlamaların listesini iconv --list – Palantir

+0

üzerinden alabilirsiniz. Elverişli bir şekilde Mac'in pano içeriğini değiştirebilirsin: 'pbpaste | iconv -f utf-8 -t -utf-8 -c | pbcopy'. Ayrıca, ascii'yi hedefleyerek tüm özel karakterleri sıyırmak için global bir kısayolu olan bir Alfred iş akışı oluşturdum. –

-2
cat foo.txt | strings -n 8 > bar.txt 

iş yapacak.

+7

Hayır, bu da geçerli utf-8 karakterleri çok öldürecek. –

İlgili konular