Nasıl dosyaları bir demet Perl kullanarak UTF-8, ISO-8859-1 den dönüştürebilirsiniz?

3 Cevap php

Ben (tabii BOM olmadan) UTF-8, ISO-8859-1 dönüştürmek için gereken birkaç evrak var. Bu olsa konudur. Ben bu belgelerin çok var (aslında belgelerin bir karışımı olduğunu, bazı UTF-8 ve bazı ISO-8859-1) Ben onları dönüştürme otomatik bir yol gerekir. Ne yazık ki sadece ActivePerl yüklü ve o dilde kodlama hakkında çok şey bilmiyorum. Ben PHP yüklemek mümkün olabilir, ama bu benim kişisel bilgisayar olmadığı gibi emin değilim.

Sadece bu nedenle ben Scite veya Notepad + + kullanın, biliyorum, ama her ikisi de doğru dönüştürmek yoktur. Ben karakter "Z" içeren Çek bir belgeyi açın ve Notepad + + 'da "UTF-8 dönüştürme" seçeneğine gidin Örneğin, yanlış bir okunamayan karaktere dönüştürür.

Orada onları dönüştürmek CAN bir yoldur, ama bu sıkıcı. Ben özel karakterlere sahip belgeyi açın ve Windows panosuna belgeyi kopyalamak, sonra UTF-8 belgesine yapıştırın ve kaydedin, bu tamam. Bu bendeki belgelerin miktarı için (yeni bir belgeye her dosya ve kopyalama / yapıştırma açılması) çok sıkıcı.

Any ideas? Thanks!!!

3 Cevap

Karakter 'ž' dahil ise o kodlama kesinlikle ISO-8859-1 ("Latin 1") değil ama muhtemelen CP1252 ("Win Latin 1") 'dir. UTF8, ISO-8859-1 ve CP1252 (hatta aynı dosyada) bir karışımı ile başa çıkmak Encoding::FixLatin Perl modülü için tasarlanmış tam olarak ne olduğunu.

Bu komutu çalıştırarak CPAN modülünü yükleyebilirsiniz:

perl -MCPAN -e "install 'Encoding::FixLatin'"

Daha sonra Encoding :: FixLatin modülü kullanan kısa Perl komut dosyası yazabilirsiniz, ama daha kolay bir yolu var. Modülü fix_latin standart girdi karışık kodlama alır ve standart çıktıya UTF8'i yazar denilen bir komutu ile birlikte geliyor. Yani bir dosya dönüştürmek için böyle bir komut satırını kullanabilirsiniz:

fix_latin <input-file.txt >output-file.txt

Windows çalıştırıyorsanız sonra fix_latin komutu yolunda olmayabilir ve böyle bir şey yapmak gerekir bu durumda pl2bat geçirilmiş olmayabilirdi:

perl C:\perl\bin\fix_latin.pl <input-file.txt >output-file.txt

Kesin yolları ve dosya adlarını sistemi için ayarlanması gerekir.

Dosyaları bir sürü genelinde fix_latin çalıştırmak için bir Linux sistemi üzerinde önemsiz olacaktır ama Windows muhtemelen powershell veya benzeri kullanmak gerekiyordu.

Ben bu özel soruya geçerli bir yanıt olup olmadığından emin değilim, ama GNU iconv tool baktım? Bu oldukça genel olarak mevcut bulunuyor.

Cygwin erişebilir ya da (diyelim ki, üzerinden, gnuwin32 windows için mevcut bütün bunlar, bash, grep, iconv ve dosyası gerekir) Ortak * nix araçları bir çift indirmek mümkün olup olmadığını , sen işini yapar, oldukça basit bir kabuk komut dosyası yazmak mümkün olabilir.

Aşağıdaki gibi komut approximately görünecektir:

for f in *;
do
   if file $f | grep 'ISO-8859' > /dev/null;
   then
      cat $f | iconv -f iso-8859-1 -t utf-8 > $f.converted;
   else
      echo "Not converting $f"
   fi;
done;

Sen mesela, olsa adımları test etmek gerekir Ben "dosya" tam bir ISO-8859 belgesi için ne derdi emin değilim.