Aquí está mi opinión sobre cómo detectar la familia Unicode de codificaciones de texto a través de BOM. La precisión de este método es baja, ya que este método solo funciona en archivos de texto (específicamente archivos Unicode), y el valor predeterminado es ascii
cuando no hay BOM presente (como la mayoría de los editores de texto, el valor predeterminado sería UTF8
si desea hacer coincidir el ecosistema HTTP / web )
Actualización 2018 : ya no recomiendo este método. Recomiendo usar file.exe de las herramientas GIT o * nix como lo recomienda @Sybren, y en una respuesta posterior muestro cómo hacerlo a través de PowerShell .
# 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
Recomendación: Esto puede funcionar razonablemente bien si el dir
, ls
o Get-ChildItem
sólo comprueba conocidos archivos de texto, y cuando sólo están buscando "malos" de codificaciones de una lista conocida de herramientas. (es decir, SQL Management Studio tiene como valor predeterminado UTF16, que rompió GIT auto-cr-lf para Windows, que fue el valor predeterminado durante muchos años).