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
file
komutunu 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-encoding
dosyanı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 ascii
BOM 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
, ls
ya da Get-ChildItem
sadece 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-FileEncoding
sistemimde 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 file
Syben'in cevabından ( stackoverflow.com/a/34766140/195755 ) veya başka bir üretim kalitesinde unicode kod çözücüden komut kullanmanızı öneririz .
default
kodlama 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.exe
powershell 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 10000
vs where.exe git
.
where.exe
ayırt etmek where
için kullanıyorum Where-Object
. Örnek: where.exe git*
vs ls . | where Size -lt 10000
file.exe
statik 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.