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


Yanıtlar:


36

Cygwin veya GnuWin32 , iconvve 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. .


4
Giriş ve çıkışla aynı dosya adını kullanmayın! iconvBu boyutu aşarsa dosyaları 32.768 bayta keser gibi görünüyor.
Okumaya

1
Bilginize Bu soru osx ile etiketlendi ve Yosemite veya El Cap'te tüm dönüşümü komutları gibi görünmüyor. İconv sürümü Apples gemileri --verbose veya -o komutlarını desteklemiyor ve diğer sözdizimi stdout komutunu bir nedenden dolayı çalışmıyor ve sadece normal stdout'a gönderiyor.
Scott McIntyre

28

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
}

İlk teklifinizle
ANSI’den UTF’ye

@ Acroneos: o zaman bir hata yaptınız: dosya içi IN.txt, outfile OUT.txt ... bu şekilde orijinalin üzerine yazmak mümkün değildir. Eğer aynı dosya adını IN.txt ve OUT.txt için kullandıysanız, okuduğunuz dosyanın üzerine yazarsınız.
akira

Powershell malzeme listesi ile UTF'ye dönüştürülecek. Bul ve iconv çok daha kolay olabilir.
pparas

6

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

3

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.


Aynı klasöre, sadece başka bir hedef klasöre dönüştüremazlar.
Uwe Keim

Pro sürümü yerinde dönüşüm sağlar. 20 $ / 3ay. rotatingscrew.com/utfcast-version-comparison.aspx
SherylHohman

Oh, express (ücretsiz) sürümü işe yaramaz - sadece BOM ile utf-8 "Algılar"! (herkesin yapabileceği bu ). Yalnızca 3 ayda bir pop $ 20’de otomatik olarak yenilenen Pro sürümü otomatik olarak algılar. Fiyat kurumsal olmayan bir kullanıcı için dik. AND Temel sürümü denerseniz ve dosyanız zaten utf-8 (BOM olmadan) ise, bu durumda bu dönüştürücü ASCII olarak algılar, sonra (yeniden -) "dönüştür" dür ve anlamsızca sonuçlanabilir. . Ekspres sürümü denemeden önce bu farkında olun! Profesyoneller için çıktı üretmeyen bir demo sürümleri var - anlamsız IMHO cuz satın almadan önce sonuçları doğrulayamıyor!
SherylHohman

3

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

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-8kodlamaya 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 shile kullanıldığında -execbir tek astar çalışan -cbayrağı ve konumsal argüman olarak dosya adı geçen "$1"ile -- {}. Arada, utf-8çıktı dosyası geçici olarak adlandırılır converted.

findKomut Böyle bir dosya yönetim otomasyonu için çok yararlıdır.

Daha fazla findbolluk için buraya tıklayın .


1

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

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





0

Benim kullanım durumda, otomatik giriş kodlama algılama gerekli ve dosyaların bir sürü vardı Windows-1250kodlama 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' -- {} \;
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.