Ottieni la codifica di un file in Windows

Questa non è una domanda di programmazione, c’è una riga di comando o uno strumento di Windows (Windows 7) per ottenere la codifica corrente di un file di testo? Certo, posso scrivere una piccola app C # ma volevo sapere se c’è già qualcosa di già costruito?

Apri il tuo file usando il normale vecchio Blocco note di Vanilla fornito con Windows.
Ti mostrerà la codifica del file quando fai clic su ” Salva con nome … “.
Sembrerà come questo: inserisci la descrizione dell'immagine qui

Qualunque sia la codifica selezionata di default, questo è ciò che la codifica corrente è per il file.
Se è UTF-8, è ansible modificarlo in ANSI e fare clic su Salva per modificare la codifica (o viceversa).

Mi rendo conto che ci sono molti diversi tipi di codifica, ma questo era tutto ciò di cui avevo bisogno quando sono stato informato che i nostri file di esportazione erano in UTF-8 e che avevano bisogno di ANSI. Era un’esportazione una tantum, quindi il Blocco note è stato perfetto per me.

A proposito: dalla mia comprensione penso che ” Unicode ” (come elencato nel Blocco note) è un termine improprio per UTF-16.
Più qui sull’opzione ” Unicode ” del Blocco note: Windows 7 – UTF-8 e Unicdoe

Lo “strumento” della riga di comando (Linux) è disponibile su Windows tramite GnuWin32:

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

Se hai git installato, si trova in C: \ Programmi \ git \ usr \ bin.

Esempio:

     C: \ Users \ SH \ Downloads \ SquareRoot> file *
     _UpgradeReport_Files;  elenco
     debug;  elenco
     duration.h;  Testo del programma ASCII C ++, con terminatori di riga CRLF
     IPCH;  elenco
     main.cpp;  Testo del programma ASCII C, con terminatori di riga CRLF
     Precision.txt;  Testo ASCII, con terminatori di riga CRLF
     Pubblicazione;  elenco
     Speed.txt;  Testo ASCII, con terminatori di riga CRLF
     SquareRoot.sdf;  dati
     SquareRoot.sln;  Testo Unicode UTF-8 (con BOM), con terminatori di riga CRLF
     SquareRoot.sln.docstates.suo;  PCX ver.  2,5 dati di immagine
     SquareRoot.suo;  Documento CDF V2, danneggiato: imansible leggere le informazioni di riepilogo
     SquareRoot.vcproj;  Testo del documento XML
     SquareRoot.vcxproj;  Testo del documento XML
     SquareRoot.vcxproj.filters;  Testo del documento XML
     SquareRoot.vcxproj.user;  Testo del documento XML
     squarerootmethods.h;  Testo del programma ASCII C, con terminatori di riga CRLF
     UpgradeLog.XML;  Testo del documento XML

     C: \ Users \ SH \ Downloads \ SquareRoot> file --mime-encoding *
     _UpgradeReport_Files;  binario
     debug;  binario
     duration.h;  US-ASCII
     IPCH;  binario
     main.cpp;  US-ASCII
     Precision.txt;  US-ASCII
     Pubblicazione;  binario
     Speed.txt;  US-ASCII
     SquareRoot.sdf;  binario
     SquareRoot.sln;  utf-8
     SquareRoot.sln.docstates.suo;  binario
     SquareRoot.suo;  Documento CDF V2, corrotto: imansible leggere il sumrio infobinato
     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

Se hai “git” o “Cygwin” sulla tua macchina Windows, vai alla cartella in cui è presente il tuo file ed esegui il comando:

 file * 

Questo ti darà i dettagli di codifica di tutti i file in quella cartella.

Un altro strumento che ho trovato utile: https://archive.codeplex.com/?p=encodingchecker

Ecco il mio modo di rilevare la famiglia di codifiche di testo Unicode tramite BOM. L’accuratezza di questo metodo è bassa, in quanto questo metodo funziona solo su file di testo (in particolare file Unicode) e, in caso di assenza di distinta base, è ascii su ascii (come la maggior parte degli editor di testo, l’impostazione predefinita sarebbe UTF8 se si desidera far corrispondere l’HTTP / ecosistema web).

Aggiornamento 2018 : non consiglio più questo metodo. Consiglio di utilizzare file.exe dagli strumenti GIT o * nix come raccomandato da @Sybren e mostro come farlo tramite PowerShell in una risposta successiva .

 # 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 

Raccomandazione: Questo può funzionare abbastanza bene se dir , ls o Get-ChildItem controllano solo i file di testo noti e quando si cercano solo “codifiche errate” da un elenco noto di strumenti. (Ad esempio, SQL Management Studio è impostato su UTF16, che ha interrotto GIT auto-cr-lf per Windows, che era l’impostazione predefinita per molti anni.)

Puoi usare un’utilità gratuita chiamata Encoding Recognizer (richiede java). Puoi trovarlo su http://mindprod.com/products2.html#ENCODINGRECOGNISER

Simile alla soluzione sopra elencata con Blocco note, puoi anche aprire il file in Visual Studio, se lo stai utilizzando. In Visual Studio, puoi selezionare “File> Opzioni di salvataggio avanzate …”

La casella combinata “Codifica:” ti dirà in particolare quale codifica è attualmente utilizzata per il file. Ha un numero molto maggiore di codifiche di testo elencate in quelle di Notepad, quindi è utile quando si ha a che fare con vari file da tutto il mondo e qualsiasi altra cosa.

Proprio come il Blocco note, puoi anche modificare la codifica dall’elenco delle opzioni presenti, quindi salvare il file dopo aver premuto “OK”. Puoi anche selezionare la codifica desiderata tramite l’opzione “Salva con codifica …” nella finestra di dialogo Salva con nome (facendo clic sulla freccia accanto al pulsante Salva).

Ho scritto la risposta n. 4 (al momento della stesura). Ma ultimamente ho git installato su tutti i miei computer, quindi ora utilizzo la soluzione di @ Sybren. Ecco una nuova risposta che rende la soluzione a portata di mano da PowerShell (senza mettere tutti git / usr / bin nel PATH, che è troppo confuso per me).

Aggiungi questo al tuo profile.ps1 :

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

E usato come: file.exe --mime-encoding * . È necessario includere .exe nel comando affinché l’alias PS funzioni.

Ma se non personalizzi il tuo profilo PowerShell.ps1 ti suggerisco di iniziare con il mio: https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0 e salvarlo su ~\Documents\WindowsPowerShell . È sicuro da usare su un computer senza git, ma scriverà degli avvertimenti quando git non viene trovato.

L’ exe nel comando è anche il modo in cui utilizzo C:\WINDOWS\system32\where.exe da powershell; e molti altri comandi della CLI OS che sono “nascosti di default” da powershell, * shrug *.

L’unico modo in cui ho trovato di farlo è VIM o Notepad ++.