Obter codificação de um arquivo no Windows

Isso não é realmente uma questão de programação, existe uma linha de comando ou ferramenta do Windows (Windows 7) para obter a codificação atual de um arquivo de texto? Claro que eu posso escrever um pequeno aplicativo C #, mas eu queria saber se há algo já embutido?

Abra seu arquivo usando o velho e comum Notepad que vem com o Windows.
Ele mostrará a codificação do arquivo quando você clicar em ” Salvar como … “.
Vai ficar assim: insira a descrição da imagem aqui

Qualquer que seja a codificação selecionada por padrão, é a sua codificação atual para o arquivo.
Se for UTF-8, você pode alterá-lo para ANSI e clicar em salvar para alterar a codificação (ou vice-versa).

Eu percebo que existem muitos tipos diferentes de codificação, mas isso era tudo que eu precisava quando fui informado que nossos arquivos de exportação estavam em UTF-8 e eles precisavam de ANSI. Era uma exportação única, então o Bloco de Notas encheckboxva a conta para mim.

FYI: Do meu entendimento eu acho que ” Unicode ” (como listado no bloco de notas) é um nome impróprio para UTF-16.
Mais aqui na opção ” Unicode ” do Bloco de Notas: Windows 7 – UTF-8 e Unicdoe

O ‘arquivo’ da ferramenta de linha de comando (Linux) está disponível no Windows via GnuWin32:

http://gnuwin32.sourceforge.net/packages/file.htm

Se você instalou o git, ele está localizado em C: \ Arquivos de Programas \ git \ usr \ bin.

Exemplo:

     C: \ Users \ SH \ Downloads \ SquareRoot> arquivo *
     _UpgradeReport_Files;  diretório
     Depurar;  diretório
     duration.h;  Texto do programa ASCII C ++, com terminadores de linha CRLF
     ipch;  diretório
     main.cpp;  Texto do programa ASCII C, com terminadores de linha CRLF
     Precision.txt;  Texto ASCII, com terminadores de linha CRLF
     Lançamento;  diretório
     Speed.txt;  Texto ASCII, com terminadores de linha CRLF
     SquareRoot.sdf;  dados
     SquareRoot.sln;  Texto Unicode UTF-8 (com BOM), com terminadores de linha CRLF
     SquareRoot.sln.docstates.suo;  PCX ver.  2.5 dados de imagem
     SquareRoot.suo;  CDF V2 Document, corrupt: Não é possível ler informações resumidas
     SquareRoot.vcproj;  Texto do documento XML
     SquareRoot.vcxproj;  Texto do documento XML
     SquareRoot.vcxproj.filters;  Texto do documento XML
     SquareRoot.vcxproj.user;  Texto do documento XML
     squarerootmethods.h;  Texto do programa ASCII C, com terminadores de linha CRLF
     UpgradeLog.XML;  Texto do documento XML

     C: \ Usuários \ SH \ Downloads \ SquareRoot> arquivo --mime-encoding *
     _UpgradeReport_Files;  binário
     Depurar;  binário
     duration.h;  nós-ascii
     ipch;  binário
     main.cpp;  nós-ascii
     Precision.txt;  nós-ascii
     Lançamento;  binário
     Speed.txt;  nós-ascii
     SquareRoot.sdf;  binário
     SquareRoot.sln;  utf-8
     SquareRoot.sln.docstates.suo;  binário
     SquareRoot.suo;  CDF V2 Document, corrupt: Não é possível ler o resumo infobinary
     SquareRoot.vcproj;  nós-ascii
     SquareRoot.vcxproj;  utf-8
     SquareRoot.vcxproj.filters;  utf-8
     SquareRoot.vcxproj.user;  utf-8
     squarerootmethods.h;  nós-ascii
     UpgradeLog.XML;  nós-ascii

Se você tem “git” ou “Cygwin” na sua máquina Windows, vá para a pasta onde seu arquivo está presente e execute o comando:

 file * 

Isso fornecerá os detalhes de codificação de todos os arquivos nessa pasta.

Outra ferramenta que achei útil: https://archive.codeplex.com/?p=encodingchecker

Aqui está a minha opinião sobre 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 somente em arquivos de texto (especificamente arquivos Unicode) e assume o padrão ascii quando não há BOM presente (como a maioria dos editores de texto, o padrão seria UTF8 se você deseja corresponder ao HTTP / ecossistema da web).

Atualização 2018 : não recomendo mais esse método. Eu recomendo usar file.exe das ferramentas GIT ou * nix conforme recomendado pelo @Sybren, e mostrarei 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 o dir , ls ou Get-ChildItem verificar somente arquivos de texto conhecidos e quando você estiver apenas procurando por “codificações incorretas” de uma lista de ferramentas conhecidas. (Por exemplo, o SQL Management Studio é padronizado como UTF16, que quebrou o GIT auto-cr-lf para Windows, que era o padrão por muitos anos.)

Você pode usar um utilitário gratuito chamado Encoding Recognizer (requer codificador). Você pode encontrá-lo em http://mindprod.com/products2.html#ENCODINGRECOGNISER

Semelhante à solução listada acima com o Bloco de notas, você também pode abrir o arquivo no Visual Studio, se estiver usando isso. No Visual Studio, você pode selecionar “Arquivo> Opções Avançadas de Salvamento …”

A checkbox de combinação “Codificação:” informará especificamente qual codificação está sendo usada no momento para o arquivo. Tem muito mais codificações de texto listadas lá do que o Notepad, então é útil quando se lida com vários arquivos de todo o mundo e qualquer outra coisa.

Assim como o Bloco de Notas, você também pode alterar a codificação da lista de opções e salvá-lo depois de pressionar “OK”. Você também pode selecionar a codificação desejada por meio da opção “Salvar com codificação …” na checkbox de diálogo Salvar como (clicando na seta ao lado do botão Salvar).

Eu escrevi a resposta # 4 (no momento da escrita). Mas ultimamente eu tenho git instalado em todos os meus computadores, então agora eu uso a solução @ Sybren. Aqui está uma nova resposta que torna essa solução acessível a partir do powershell (sem colocar todo o git / usr / bin no PATH, o que é muito confuso para mim).

Adicione isto ao seu profile.ps1 :

 $global:gitbin = 'C:\Program Files\Git\usr\bin' Set-Alias file.exe $gitbin\file.exe 

E usado como: file.exe --mime-encoding * . Você deve include .exe no comando para alias PS para trabalhar.

Mas se você não personalizar seu perfil do PowerShell.ps1, sugiro que comece com o meu: https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0 e salve-o em ~\Documents\WindowsPowerShell . É seguro usar em um computador sem git, mas irá escrever avisos quando o git não for encontrado.

O exe no comando é também como eu uso C:\WINDOWS\system32\where.exe do powershell; e muitos outros comandos do OS CLI que são “ocultos por padrão” pelo powershell, * shrug *.

A única maneira que eu encontrei para fazer isso é VIM ou Notepad ++.