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é?
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:
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
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
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.
Un autre outil que j'ai trouvé utile: https://archive.codeplex.com/?p=encodingchecker EXE peut être trouvé ici
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.)
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 *.
Vous pouvez utiliser un utilitaire gratuit appelé Encoding Recognizer (nécessite Java). Vous pouvez le trouver à http://mindprod.com/products2.html#ENCODINGRECOGNISER
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).
Une solution simple pourrait être d'ouvrir le fichier dans Firefox.
et l'encodage du texte apparaîtra dans la fenêtre "Page Info".
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.
Le seul moyen que j’ai trouvé pour cela est VIM ou Notepad ++.
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.