Aqui está meu exemplo de como detectar a família Unicode de codificações de texto via BOM. A precisão desse método é baixa, pois esse método funciona apenas em arquivos de texto (especificamente arquivos Unicode) e o padrão é ascii
quando nenhuma BOM está presente (como a maioria dos editores de texto, o padrão seria UTF8
se você deseja corresponder ao ecossistema HTTP / Web )
Atualização 2018 : Não recomendo mais esse método. Recomendo usar o arquivo.exe das ferramentas GIT ou * nix, conforme recomendado pelo @Sybren, e mostro como fazer isso via PowerShell em uma resposta posterior .
# 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
Recomendação: Isso pode funcionar razoavelmente bem, se as dir
, ls
ou Get-ChildItem
apenas verifica conhecidos arquivos de texto, e quando você só está procurando "maus codificações" de uma lista conhecida de ferramentas. (ou seja, o SQL Management Studio assume como padrão o UTF16, que interrompeu o GIT auto-cr-lf para Windows, que foi o padrão por muitos anos.)