Bir dizindeki dosyaları kodlaması için (örn. ANSI-> UTF-8) bir komut veya araçla nasıl topluştırabilirim?
Tek dosyalar için bir editör yardımcı olur, ancak toplu dosyalar nasıl yapılır?
Bir dizindeki dosyaları kodlaması için (örn. ANSI-> UTF-8) bir komut veya araçla nasıl topluştırabilirim?
Tek dosyalar için bir editör yardımcı olur, ancak toplu dosyalar nasıl yapılır?
Yanıtlar:
Cygwin veya GnuWin32 , iconv
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ı bilmediğiniz sürece, bu durumda iconv'dan tercüme etmek için doğru kod sayfasını söylemeniz gerekir .)
Birinden ( -f
) diğerine ( -t
) ile dönüştürme:
$ iconv -f windows-1252 -t utf-8 infile > outfile
Ya da her şeyi bul ve fethedil;
## 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 birçok kez soruldu, bu yüzden işte "ANSI" hakkında ek bilgiler. İlgili bir soruya cevap olarak CesarB şunları söyler :
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 bu tarihsel haber kağıdını ( bir Microsoft PDF'den alıntılanmıştır ) vermektedir:
[...] 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. Ancak, ISO standardındaki kontrol kodları için ayrılmış aralığa kod noktaları eklendiğinde, Windows kod sayfası 1252 ve sonraki 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. .
iconv
Bu boyutu aşarsa dosyaları 32.768 bayta keser gibi görünüyor.
powershell ile böyle 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
}
Yeni hatlardaki Wikipedia sayfası, dönüşüm araçlarına ilişkin 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
UTFCast , 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 kodları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.
Eşleşen tüm metin dosyalarının karakter kodlaması otomatik olarak algılanır ve eşleşen tüm metin dosyaları utf-8
kodlamaya 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"' -- {} \;
Şu adımları gerçekleştirmek için, bir alt kabuk sh
ile kullanıldığında -exec
bir tek astar çalışan -c
bayrağı ve konumsal argüman olarak dosya adı geçen "$1"
ile -- {}
. Arada, utf-8
çıktı dosyası geçici olarak adlandırılır converted
.
find
Komut Böyle bir dosya yönetim otomasyonu için çok yararlıdır.
Daha fazla find
bolluk için buraya tıklayın .
iconv -f original_charset -t utf-8 originalfile > newfile
Döngü için yukarıdaki komutu çalıştırın.
Bu Python betiğini kullanın: https://github.com/goerz/convert_encoding.py Herhangi bir platformda çalışır. Python 2.7 gerektirir.
Orada dos2unix
UNix.
Windows için benzer başka bir araç vardı ( başka bir ref burada ).
Unix ve Windows metin dosyaları arasında nasıl dönüştürebilirim? biraz daha numara var
dos2unix
Satır sonlarını dönüştürmek için yararlıdır , ancak OP karakter kodlamaları dönüştürmek için arıyor.
EncodingMaster'ı kullanabilirsiniz . Ücretsiz, Windows, Linux ve Mac OS X sürümüne sahip ve gerçekten iyi çalışıyor.
Benim kullanım durumda, otomatik giriş kodlama algılama gerekli ve dosyaların bir sürü vardı Windows-1250
kodlama için komut file -bi <FILE>
verir charset=unknown-8bit
. Bu, geçerli bir parametre değil iconv
.
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' -- {} \;