it-swarm.asia

Toplu dönüştürme dosyaları kodlama için

Bir dizindeki dosyaları kodlama için (ör. ANSI-> UTF-8) bir komut veya araçla nasıl topluştırabilirim?

Tek dosyalar için bir editör yardımcı olur, fakat toplu dosyalar nasıl yapılır?

46
desolat

Cygwin veya GnuWin32iconv ve dos2unix (ve unix2dos) gibi Unix araçları sağlar. Unix/Linux/Cygwin altında, ANSI yerine kodlama olarak "windows-1252" kullanmak isteyeceksiniz (aşağıya bakınız). (Sisteminizin varsayılan kod sayfası olarak 1252 dışında bir kod sayfası kullandığını bilmiyorsanız, bu durumda doğru kod sayfasını söylemeniz gerekir iconv den çeviri.)

Birinden (-f) diğerine (-t) dönüştürün:

$ iconv -f windows-1252 -t utf-8 infile > outfile

Ya da her şeyi bul ve fethedil bir biçimde:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;

Alternatif:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;

Bu soru bu sitede defalarca soruldu, bu yüzden işte "ANSI" hakkında ek bilgiler. İlgili bir sorunun cevabında CesarB 'den bahseder:

Windows'ta "ANSI" adı verilen çeşitli kodlamalar vardır. Aslında, ANSI bir yanlış isim . iconv'nin hangisini istediğini tahmin etmenin bir yolu yok.

ANSI kodlaması, Windows API'deki "A" işlevleri tarafından kullanılan kodlamadır ("W" işlevleri UTF-16'yı kullanır). Hangi kodlamaya karşılık gelir, genellikle Windows sistem dilinize bağlıdır. En yaygın CP 1252'dir (Windows-1252 olarak da bilinir). Bu nedenle, editörünüz ANSI derken, "API işlevleri varsayılan ANSI kodlaması olarak ne kullanırsa kullanılsın" anlamına gelir; bu, sisteminizde kullanılan varsayılan Unicode olmayan kodlamadır (ve bu nedenle genellikle metin dosyaları için kullanılır).

Bağlandığı sayfa, başka bir kullanılmış kodlama olan CP 1252 ve ISO-8859-1'in kökenleri üzerine (buradaki Microsoft PDF'den ) alıntılanmıştır.

[...] bu, 1252 numaralı Windows kod sayfasının başlangıçta ISO 8859-1 standardı olan bir ANSI taslağına dayanması gerçeğinden kaynaklanıyordu. Bununla birlikte, ISO standardındaki kontrol kodları için ayrılmış aralığa kod noktaları eklendiğinde, Windows kod sayfası 1252 ve izleyen Windows kod sayfaları başlangıçta ISO'dan sapan ISO 8859-x serisine dayanır. Bugüne kadar, Microsoft'un içinde ve dışında bir geliştirme topluluğunun olması, 8859-1 kod sayfasını Windows 1252 ile karıştırmanın yanı sıra Windows kod sayfası desteğini belirtmek için kullanılan "ANSI" veya "A" konusuna bakın. .

36
quack quixote

powershell ile bunun gibi bir şey yapabilirsiniz:

%  get-content IN.txt | out-file -encoding ENC -filepath OUT.txt

eNC unicode, ascii, utf8, utf32 gibi bir şey olsa da. Çıkış 'yardım dosyası'.

bir dizindeki tüm * .txt dosyalarını utf8'e dönüştürmek için şöyle bir şey yapın:

% foreach($i in ls -name DIR/*.txt) { \
       get-content DIR/$i | \
       out-file -encoding utf8 -filepath DIR2/$i \
  }

bu, DIR2'deki her .txt dosyasının dönüştürülmüş bir sürümünü oluşturur.

EDIT: Tüm alt dizinlerdeki dosyaları değiştirmek için şunu kullanın:

% foreach($i in ls -recurse -filter "*.Java") {
    $temp = get-content $i.fullname
    out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
28
akira

Yeni satırlardaki Wikipedia sayfası dönüşüm yardımcı programları ile ilgili bir bölüm içerir.

Bu, yalnızca Windows'un birlikte gönderdiği araçları kullanarak bir dönüşüm için en iyi şansınız gibi görünüyor:

TYPE unix_file | FIND "" /V > dos_file
6
nagul

TFCast , toplu iş modunu destekleyen Windows için bir Unicode dönüştürücüsüdür. Ücretli sürümünü kullanıyorum ve oldukça rahatım.

UTFCast, bir fare tıklamasıyla tüm metin dosyalarını UTF kodlamasına toplu olarak dönüştürmenize olanak tanıyan bir Unicode dönüştürücüsüdür. Orijinal dosyaların dizin yapısını korurken, metin dosyalarıyla dolu bir dizini UTF-8, UTF-16 ve UTF-32 de dahil olmak üzere UTF kodlamalarına dönüştürmek için kullanabilirsiniz. Metin dosyanızın farklı bir uzantısı olsa bile fark etmez, UTFCast metin dosyalarını otomatik olarak algılayabilir ve dönüştürebilir.

3
Tiler

Oneliner, otomatik algılama ile bulma özelliğini kullanarak

Karakter kodlaması eşleşen tüm metin dosyalarının otomatik olarak algılanır ve eşleşen tüm metin dosyaları utf-8 kodlamasına dönüştürülür:

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

Bu adımları gerçekleştirmek için, bir alt Kabuk sh-exec ile birlikte kullanılır, -c bayrağıyla bir liner kullanılır ve dosya adını "$1" ile -- {} konum argümanı olarak geçirir. Arada, utf-8 çıkış dosyası geçici olarak converted olarak adlandırılır.

find komutu, bu tür dosya yönetimi otomasyonu için çok kullanışlıdır.

daha fazla find galore için burayı tıklayın.

2
Serge Stroobandt

iconv -f original_charset -t utf-8 originalfile > newfile

döngü için yukarıdaki komutu çalıştırın.

1
Aneesh Garg

EncodingMaster kullanabilirsiniz. Ücretsiz, Windows, Linux ve Mac OS X sürümüne sahip ve gerçekten iyi çalışıyor.

0
Francisco Vera

Kullanım durumumda, otomatik giriş kodlaması algılamasına ihtiyacım vardı ve Windows-1250 kodlaması olan file -bi <FILE> komutu charset=unknown-8bit değerini döndüren çok sayıda dosya vardı. Bu iconv için geçerli bir parametre değil.

enca ile en iyi sonuçları aldım.

txt uzantılı tüm dosyaları utf-8'e dönüştürün

find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;
0
Bedla

Bu Python betiğini kullanın: https://github.com/goerz/convert_encoding.py Herhangi bir platformda çalışır. Python 2.7 gerektirir.

0
kinORnirvana

Unix'te dos2unix var.
Windows için benzer bir araç daha vardı ( burada başka bir ref ).

Unix ve Windows metin dosyaları arasında nasıl dönüştürebilirim? biraz daha püf noktası var?

0
nik