web-dev-qa-db-fra.com

Obtenir l'encodage d'un fichier sous Windows

Ce n'est pas vraiment une question de programmation, existe-t-il une ligne de commande ou un outil Windows (Windows 7) pour obtenir le codage actuel d'un fichier texte? Bien sûr, je peux écrire une petite application C # mais je voulais savoir s'il y avait quelque chose déjà intégré?

143
TheWebGuy

Ouvrez votre fichier avec le vieux bloc-notes Vanilla fourni avec Windows.
Il vous montrera le codage du fichier lorsque vous cliquerez sur "Save As ...".
Cela va ressembler à ceci: enter image description here

Quel que soit l'encodage sélectionné par défaut, c'est ce que votre encodage actuel est pour le fichier .
S'il s'agit du format UTF-8, vous pouvez le remplacer par ANSI et cliquer sur Enregistrer pour modifier le codage (ou inversement).

Je me rends compte qu'il existe de nombreux types d'encodage, mais c'est tout ce dont j'avais besoin quand j'ai été informé que nos fichiers d'exportation étaient au format UTF-8 et qu'ils nécessitaient une norme ANSI. Il s’agissait d’une exportation unique, donc le Bloc-notes me convenait parfaitement.

Pour votre information, je pense que "Unicode" (comme indiqué dans le Bloc-notes) est un terme impropre pour UTF-16.
Plus d'informations sur l'option "Unicode" du Bloc-notes: Windows 7 - UTF-8 et Unicdoe

165
MikeTeeVee

Le 'fichier' de l'outil de ligne de commande (Linux) est disponible sous Windows via GnuWin32:

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

Si vous avez installé git, il se trouve dans C:\Program Files\git\usr\bin. 

Exemple:

 C:\Utilisateurs\SH\Téléchargements\SquareRoot> fichier * 
 _UpgradeReport_Files; annuaire
 Déboguer; annuaire
 duration.h; ASCII Texte du programme C++, avec terminaisons de ligne CRLF 
 ipch; annuaire
 main.cpp; ASCII Texte du programme C, avec terminaisons de ligne CRLF 
 Precision.txt; Texte ASCII, avec terminaisons de ligne CRLF 
 Libération; annuaire
 Speed.txt; Texte ASCII, avec terminaisons de ligne CRLF 
 SquareRoot.sdf; Les données
 SquareRoot.sln; Texte Unicode UTF-8 (avec nomenclature), avec terminaisons de ligne CRLF 
 SquareRoot.sln.docstates.suo; PCX ver. 2.5 données d'image 
 SquareRoot.suo; Document CDF V2, corrompu: Impossible de lire les informations récapitulatives 
 SquareRoot.vcproj; Texte du document XML 
 SquareRoot.vcxproj; Texte du document XML 
 SquareRoot.vcxproj.filters; Texte du document XML 
 SquareRoot.vcxproj.user; Texte du document XML 
 squarerootmethods.h; ASCII Texte du programme C, avec terminaisons de ligne CRLF 
 UpgradeLog.XML; Texte du document XML 

 C:\Utilisateurs\SH\Téléchargements\SquareRoot> fichier --mime-encoding * 
 _UpgradeReport_Files; binaire
 Déboguer; binaire
 duration.h; nous-ascii 
 ipch; binaire
 main.cpp; nous-ascii 
 Precision.txt; nous-ascii 
 Libération; binaire
 Speed.txt; nous-ascii 
 SquareRoot.sdf; binaire
 SquareRoot.sln; utf-8 
 SquareRoot.sln.docstates.suo; binaire
 SquareRoot.suo; Document CDF V2, corrompu: Impossible de lire l’infobinaire récapitulatif 
 SquareRoot.vcproj; nous-ascii 
 SquareRoot.vcxproj; utf-8 
 SquareRoot.vcxproj.filters; utf-8 
 SquareRoot.vcxproj.user; utf-8 
 squarerootmethods.h; nous-ascii 
 UpgradeLog.XML; nous-ascii 
48
Sybren

Si vous avez "git" ou "Cygwin" sur votre machine Windows, allez dans le dossier où se trouve votre fichier et exécutez la commande:

file *

Cela vous donnera les détails d'encodage de tous les fichiers de ce dossier.

39
George Ninan

Un autre outil que j'ai trouvé utile: https://archive.codeplex.com/?p=encodingchecker EXE peut être trouvé ici

19
user961954

Voici comment détecter la famille Unicode de codages de texte via BOM. L’exactitude de cette méthode est faible, car elle ne fonctionne que sur les fichiers texte (en particulier les fichiers Unicode). La valeur par défaut est ascii quand aucune nomenclature n’est présente (comme pour la plupart des éditeurs de texte, la valeur par défaut serait UTF8 si vous souhaitez faire correspondre HTTP/écosystème web).

Mise à jour 2018: Je ne recommande plus cette méthode. Je vous recommande d'utiliser file.exe à partir des outils GIT ou * nix comme recommandé par @Sybren. Je montre comment procéder via PowerShell dans une réponse ultérieure .

# 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

Recommandation: Cela peut fonctionner assez bien si la dir, ls ou Get-ChildItem ne vérifie que les fichiers texte connus et si vous recherchez uniquement des "codages incorrects" à partir d'une liste d'outils connue. (c’est-à-dire que SQL Management Studio par défaut est UTF16, ce qui a cassé GIT auto-cr-lf pour Windows, valeur par défaut pendant de nombreuses années.)

16
yzorg

J'ai écrit la réponse n ° 4 (au moment de la rédaction). Mais dernièrement, git est installé sur tous mes ordinateurs. J'utilise donc maintenant la solution @ Sybren. Voici une nouvelle réponse qui rend cette solution pratique avec powershell (sans mettre tout git/usr/bin dans PATH, ce qui est trop encombrant pour moi).

Ajoutez ceci à votre profile.ps1:

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

Et utilisé comme: file.exe --mime-encoding *. Vous devez inclure .exe dans la commande pour que l'alias PS fonctionne. 

Mais si vous ne personnalisez pas votre profil PowerShell.ps1, je vous suggère de commencer par le mien: https://Gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f0b08eb7c08be0 .__ et enregistrez-le sur ~\Documents\WindowsPowerShell. Il est sûr d'utiliser sur un ordinateur sans git, mais écrit des avertissements quand git n'est pas trouvé.

Le .exe dans la commande est aussi la façon dont j'utilise C:\WINDOWS\system32\where.exe depuis powershell; et de nombreuses autres commandes CLI du système d’exploitation qui sont "masquées par défaut" par powershell, * shrug *.

3
yzorg

Vous pouvez utiliser un utilitaire gratuit appelé Encoding Recognizer (nécessite Java). Vous pouvez le trouver à http://mindprod.com/products2.html#ENCODINGRECOGNISER

3
Ville

Semblable à la solution répertoriée ci-dessus avec Notepad, vous pouvez également ouvrir le fichier dans Visual Studio, si vous l'utilisez. Dans Visual Studio, vous pouvez sélectionner "Fichier> Options d'enregistrement avancées ...".

La liste déroulante "Encodage:" vous indiquera spécifiquement quel encodage est actuellement utilisé pour le fichier. Il contient beaucoup plus de codages de texte que le Bloc-notes, il est donc utile pour traiter divers fichiers du monde entier et autres.

Tout comme le Bloc-notes, vous pouvez également modifier le codage à partir de la liste des options puis enregistrer le fichier après avoir cliqué sur "OK". Vous pouvez également sélectionner le codage souhaité via l'option "Enregistrer avec codage ..." dans la boîte de dialogue Enregistrer sous (en cliquant sur la flèche en regard du bouton Enregistrer).

2
JaykeBird

Une solution simple pourrait être d'ouvrir le fichier dans Firefox.

  1. Glissez et déposez le fichier dans Firefox
  2. Clic droit sur la page
  3. Sélectionnez "Afficher les informations de la page"

et l'encodage du texte apparaîtra dans la fenêtre "Page Info".

enter image description here

Remarque: Si le fichier n'est pas au format txt, renommez-le simplement en txt et réessayez.

P.S. Pour plus d'informations, voir this article.

0
Just Shadow

Le seul moyen que j’ai trouvé pour cela est VIM ou Notepad ++.

0
Todd Partridge

Certains codes C ici pour la détection fiable ascii, bom's et utf8: https://unicodebook.readthedocs.io/guess_encoding.html

Seuls les codages ASCII, UTF-8 et utilisant une nomenclature (UTF-7 avec BOM, UTF-8 avec BOM, UTF-16 et UTF-32) disposent d'algorithmes fiables pour obtenir le codage d'un document. Pour tous les autres encodages, vous devez faire confiance à des heuristiques basées sur des statistiques.

0
js2010