Bu gerçekten bir programlama sorusu değil, bir metin dosyasının geçerli kodlamasını almak için bir komut satırı veya Windows aracı (Windows 7) var mı? Tabii ben biraz C # app yazabilirsiniz ama zaten yerleşik bir şey olup olmadığını bilmek istedim?
Bu gerçekten bir programlama sorusu değil, bir metin dosyasının geçerli kodlamasını almak için bir komut satırı veya Windows aracı (Windows 7) var mı? Tabii ben biraz C # app yazabilirsiniz ama zaten yerleşik bir şey olup olmadığını bilmek istedim?
Yanıtlar:
Dosyanızı, Windows ile birlikte gelen normal eski vanilya Not Defteri'ni kullanarak açın.
" Farklı Kaydet ... " i tıklattığınızda dosyanın kodlamasını gösterir .
Şöyle görünecektir:

Varsayılan olarak seçilen kodlama ne olursa olsun, dosya için geçerli kodlamanız budur.
UTF-8 ise, ANSI olarak değiştirebilir ve kodlamayı değiştirmek için kaydet'i tıklatabilirsiniz (veya tam tersi).
Birçok farklı kodlama türü olduğunun farkındayım, ancak ihracat dosyalarımızın UTF-8'de olduğu ve ANSI'ye ihtiyaç duyduğumda ihtiyacım olan tek şey buydu. Bir kerelik bir ihracattı, bu yüzden Not Defteri faturayı benim için uygun hale getirdi.
Bilginize: Anladığım kadarıyla " Unicode " un (Not Defteri'nde listelendiği gibi) UTF-16 için yanlış adlandırma olduğunu düşünüyorum .
Notepad'in " Unicode " seçeneği hakkında daha fazla bilgi: Windows 7 - UTF-8 ve Unicdoe
(Linux) komut satırı aracı 'dosya' Windows'ta GnuWin32 aracılığıyla kullanılabilir:
http://gnuwin32.sourceforge.net/packages/file.htm
Git yüklü ise, C: \ Program Files \ git \ usr \ bin konumunda bulunur.
Misal:
C: \ Kullanıcılar \ SH \ İndirilenler \ SquareRoot> dosya *
_UpgradeReport_Files; rehber
Hata ayıklama; rehber
duration.h; ASCII C ++ program metni, CRLF satır sonlandırıcıları ile
IPCH; rehber
main.cpp; ASCII C program metni, CRLF satır sonlandırıcıları ile
Precision.txt; ASCII metni, CRLF satır sonlandırıcıları ile
Serbest bırakmak; rehber
speed.txt; ASCII metni, CRLF satır sonlandırıcıları ile
SquareRoot.sdf; veri
SquareRoot.sln; UTF-8 Unicode (BOM ile) metni, CRLF satır sonlandırıcıları ile
SquareRoot.sln.docstates.suo; PCX ver. 2.5 görüntü verisi
SquareRoot.suo; CDF V2 Belgesi, bozuk: Özet bilgi okunamıyor
SquareRoot.vcproj; XML belge metni
SquareRoot.vcxproj; XML belge metni
SquareRoot.vcxproj.filters; XML belge metni
SquareRoot.vcxproj.user; XML belge metni
squarerootmethods.h; ASCII C program metni, CRLF satır sonlandırıcıları ile
UpgradeLog.XML; XML belge metni
C: \ Kullanıcılar \ SH \ İndirilenler \ SquareRoot> dosya - mime-encoding *
_UpgradeReport_Files; ikili
Hata ayıklama; ikili
duration.h; us-ascii
IPCH; ikili
main.cpp; us-ascii
Precision.txt; us-ascii
Serbest bırakmak; ikili
speed.txt; us-ascii
SquareRoot.sdf; ikili
SquareRoot.sln; UTF-8
SquareRoot.sln.docstates.suo; ikili
SquareRoot.suo; CDF V2 Belgesi, bozuk: Özet infobinary okunamıyor
SquareRoot.vcproj; us-ascii
SquareRoot.vcxproj; UTF-8
SquareRoot.vcxproj.filters; UTF-8
SquareRoot.vcxproj.user; UTF-8
squarerootmethods.h; us-ascii
UpgradeLog.XML; us-ascii
filekomutunu cygwin . Windows için herhangi bir POSIX araç seti olmalıdır file.
Windows Makinenizde "git" veya "Cygwin" varsa, dosyanızın bulunduğu klasöre gidin ve komutu yürütün:
file *
Bu size o klasördeki tüm dosyaların kodlama ayrıntılarını verecektir.
file *komut
file --mime-encodingdosyanın kodlamasını
Yararlı bulduğum başka bir araç: https://archive.codeplex.com/?p=encodingchecker EXE burada bulunabilir
İşte BOM aracılığıyla Unicode metin kodlamaları ailesini nasıl tespit edeceğim. Bu yöntemin doğruluğu düşüktür, çünkü bu yöntem yalnızca metin dosyalarında (özellikle Unicode dosyaları) çalışmaktadır ve varsayılan olarak asciiBOM olmadığında (çoğu metin düzenleyicisi gibi) UTF8, HTTP / web ekosistemiyle eşleşmek istiyorsanız varsayılan değer olacaktır. ).
Güncelleme 2018 : Artık bu yöntemi önermiyorum. @Sybren tarafından önerilen GIT veya * nix araçlarından file.exe kullanılmasını öneririm ve bunu daha sonraki bir cevapta PowerShell aracılığıyla nasıl yapacağımı gösteririm .
# from https://gist.github.com/zommarin/1480974
function Get-FileEncoding($Path) {
$bytes = [byte[]](Get-Content $Path -Encoding byte -ReadCount 4 -TotalCount 4)
if(!$bytes) { return 'utf8' }
switch -regex ('{0:x2}{1:x2}{2:x2}{3:x2}' -f $bytes[0],$bytes[1],$bytes[2],$bytes[3]) {
'^efbbbf' { return 'utf8' }
'^2b2f76' { return 'utf7' }
'^fffe' { return 'unicode' }
'^feff' { return 'bigendianunicode' }
'^0000feff' { return 'utf32' }
default { return 'ascii' }
}
}
dir ~\Documents\WindowsPowershell -File |
select Name,@{Name='Encoding';Expression={Get-FileEncoding $_.FullName}} |
ft -AutoSize
Öneri: Bu oldukça iyi çalışabilir dir, lsya da Get-ChildItemsadece metin dosyaları bilinen çekler, satın alma işlemini tamamladığında araçlar bilinen listeden "kötü kodlamaları" arıyoruz. (örn. SQL Management Studio varsayılan olarak, uzun yıllardır varsayılan olan Windows için GIT auto-cr-lf'yi kırmış olan UTF16'ya ayarlanmıştır.)
Get-FileEncodingsistemimde görünmüyor. Özel bir cmdlet mi?
Get-FileEncoding. Hatta python ve nodejs'den punycode'u inceledim, ancak bu küçük sürüm kullanımım için 80/20'ye (daha fazla 99/1 gibi) çarptı. Başkalarının dosyalarına ev sahipliği yapıyorsanız fileSyben'in cevabından ( stackoverflow.com/a/34766140/195755 ) veya başka bir üretim kalitesinde unicode kod çözücüden komut kullanmanızı öneririz .
defaultkodlama yapıyor (BOM olmadığında). XML, JSON ve JavaScript için varsayılan değer UTF8'dir, ancak kilometreniz değişebilir.
4. cevabı yazdım (yazarken). Ama son zamanlarda git'i tüm bilgisayarlarıma yükledim, şimdi @ Sybren'in çözümünü kullanıyorum. İşte bu çözümü powershell'den kullanışlı kılan yeni bir cevap (tüm git / usr / bin'i PATH'e koymadan, benim için çok fazla dağınıklık olmadan).
Bunu şu adrese ekleyin profile.ps1:
$global:gitbin = 'C:\Program Files\Git\usr\bin'
Set-Alias file.exe $gitbin\file.exe
Ve gibi kullanılabilir: file.exe --mime-encoding *. Sen .exe içermelidir işe PS takma adı için komuta.
Ancak PowerShell profilinizi özelleştirmezseniz .ps1 Benimle başlamanızı öneririm: https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0
ve kaydedin ~\Documents\WindowsPowerShell. Git bulunmayan bir bilgisayarda kullanmak güvenlidir, ancak git bulunamadığında uyarı yazar.
.Exe kullandığım nasıl komuta de C:\WINDOWS\system32\where.exepowershell den; ve powershell, * shrug * tarafından "varsayılan olarak gizlenmiş" diğer birçok OS CLI komutu.
file.exe file.exe\ _ (ツ) _ / ¯ yerine file.exe yerine takma adınız olarak kullanabilirsiniz
dir | where Size -lt 10000vs where.exe git.
where.exeayırt etmek whereiçin kullanıyorum Where-Object. Örnek: where.exe git* vs ls . | where Size -lt 10000
file.exestatik tespit aynı komut dosyası gerekebilir NET statik sınıf için aynı desen kullanın . Örnek: [File]::SetCreationTime("readme.md", [DateTime]::Now).
Basit bir çözüm, dosyayı Firefox'ta açmak olabilir.
ve metin kodlaması "Sayfa Bilgisi" penceresinde görünecektir.
Not: Dosya txt biçiminde değilse, sadece txt olarak yeniden adlandırın ve tekrar deneyin.
PS Daha fazla bilgi için bu makaleye bakın.
Kodlama Tanıyıcı (java gerektirir) adlı ücretsiz bir yardımcı program kullanabilirsiniz. Http://mindprod.com/products2.html#ENCODINGRECOGNISER adresinde bulabilirsiniz.
Yukarıda Not Defteri ile listelenen çözüme benzer şekilde, dosyayı kullanıyorsanız Visual Studio'da da açabilirsiniz. Visual Studio'da "Dosya> Gelişmiş Kaydetme Seçenekleri ..." ni seçebilirsiniz.
"Kodlama:" birleşik giriş kutusu, dosya için hangi kodlamanın kullanıldığını özellikle belirtir. Orada listelenen Not Defteri'nden çok daha fazla metin kodlaması vardır, bu nedenle dünyanın her yerinden çeşitli dosyalar ve başka her şeyle uğraşırken yararlıdır.
Not Defteri gibi, kodlamayı oradaki seçenekler listesinden değiştirebilir ve ardından "Tamam" düğmesine bastıktan sonra dosyayı kaydedebilirsiniz. İstediğiniz kodlamayı Farklı Kaydet iletişim kutusundaki "Kodlamayla Kaydet ..." seçeneğini kullanarak da (Kaydet düğmesinin yanındaki oku tıklayarak) seçebilirsiniz.
Güvenilir ascii, bom's ve utf8 algılama için bazı C kodları: https://unicodebook.readthedocs.io/guess_encoding.html
Yalnızca ASCII, UTF-8 ve BOM kullanan kodlamalar (BOM ile UTF-7, BOM ile UTF-8, UTF-16 ve UTF-32) bir belgenin kodlamasını almak için güvenilir algoritmalara sahiptir. Diğer tüm kodlamalar için, istatistiklere dayalı sezgisel taramalara güvenmeniz gerekir.
DÜZENLE:
Bir C # yanıtının powershell sürümü: Herhangi bir dosyanın Kodlamasını bulmanın etkili bir yolu . Sadece imzalarla (bombalar) çalışır.
# get-encoding.ps1
param([Parameter(ValueFromPipeline=$True)] $filename)
begin {
# set .net current directoy
[Environment]::CurrentDirectory = (pwd).path
}
process {
$reader = [System.IO.StreamReader]::new($filename,
[System.Text.Encoding]::default,$true)
$peek = $reader.Peek()
$encoding = $reader.currentencoding
$reader.close()
[pscustomobject]@{Name=split-path $filename -leaf
BodyName=$encoding.BodyName
EncodingName=$encoding.EncodingName}
}
.\get-encoding chinese8.txt
Name BodyName EncodingName
---- -------- ------------
chinese8.txt utf-8 Unicode (UTF-8)
get-childitem -file | .\get-encoding
Dosya Kodlama Denetleyicisi, bir veya daha fazla dosyanın metin kodlamasını doğrulamanızı sağlayan bir GUI aracıdır. Araç, seçilen tüm dosyalar için kodlamayı veya yalnızca belirttiğiniz kodlamaları olmayan dosyaları görüntüleyebilir.
Dosya Kodlama Denetleyicisi'nin çalışması için .NET 4 veya üstü gerekir.