Esta no es realmente una pregunta de programación, ¿hay una línea de comando o una herramienta de Windows (Windows 7) para obtener la codificación actual de un archivo de texto? Claro que puedo escribir una pequeña aplicación de C #, pero quería saber si ya hay algo integrado.
206

Respuestas:
Abra su archivo usando el Bloc de notas vanilla antiguo que viene con Windows.
Le mostrará la codificación del archivo cuando haga clic en " Guardar como ... ".
Se verá así:
Cualquiera que sea la codificación seleccionada por defecto, esa es la codificación actual para el archivo.
Si es UTF-8, puede cambiarlo a ANSI y hacer clic en guardar para cambiar la codificación (o viceversa).
Me doy cuenta de que hay muchos tipos diferentes de codificación, pero esto era todo lo que necesitaba cuando me informaron que nuestros archivos de exportación estaban en UTF-8 y requerían ANSI. Fue una exportación de una sola vez, por lo que el Bloc de notas se ajustaba perfectamente.
FYI: Según tengo entendido, creo que " Unicode " (como aparece en el Bloc de notas) es un nombre inapropiado para UTF-16.
Más información sobre la opción " Unicode " del Bloc de notas : Windows 7 - UTF-8 y Unicdoe
fuente
El 'archivo' de la herramienta de línea de comandos (Linux) está disponible en Windows a través de GnuWin32:
http://gnuwin32.sourceforge.net/packages/file.htm
Si tiene instalado git, se encuentra en C: \ Archivos de programa \ git \ usr \ bin.
Ejemplo:
C: \ Usuarios \ SH \ Descargas \ SquareRoot> archivo * _UpgradeReport_Files; directorio Depurar; directorio duración.h; Texto del programa ASCII C ++, con terminadores de línea CRLF ipch; directorio main.cpp; Texto del programa ASCII C, con terminadores de línea CRLF Precision.txt; Texto ASCII, con terminadores de línea CRLF Lanzamiento; directorio Speed.txt; Texto ASCII, con terminadores de línea CRLF SquareRoot.sdf; datos SquareRoot.sln; Texto UTF-8 Unicode (con BOM), con terminadores de línea CRLF SquareRoot.sln.docstates.suo; PCX ver. 2.5 datos de imagen SquareRoot.suo; Documento CDF V2, corrupto: no se puede leer la información de resumen SquareRoot.vcproj; Texto del documento XML SquareRoot.vcxproj; Texto del documento XML SquareRoot.vcxproj.filters; Texto del documento XML SquareRoot.vcxproj.user; Texto del documento XML squarerootmethods.h; Texto del programa ASCII C, con terminadores de línea CRLF UpgradeLog.XML; Texto del documento XML C: \ Users \ SH \ Downloads \ SquareRoot> archivo --mime-encoding * _UpgradeReport_Files; binario Depurar; binario duración.h; nosotros-ascii ipch; binario main.cpp; nosotros-ascii Precision.txt; nosotros-ascii Lanzamiento; binario Speed.txt; nosotros-ascii SquareRoot.sdf; binario SquareRoot.sln; utf-8 SquareRoot.sln.docstates.suo; binario SquareRoot.suo; Documento CDF V2, corrupto: no se puede leer el resumen infobinario SquareRoot.vcproj; nosotros-ascii SquareRoot.vcxproj; utf-8 SquareRoot.vcxproj.filters; utf-8 SquareRoot.vcxproj.user; utf-8 squarerootmethods.h; nosotros-ascii UpgradeLog.XML; nosotros-asciifuente
filecomando en cygwin . Cualquier conjunto de herramientas POSIX para Windows debería tenerfile.Si tiene "git" o "Cygwin" en su máquina con Windows, vaya a la carpeta donde está su archivo y ejecute el comando:
Esto le dará los detalles de codificación de todos los archivos en esa carpeta.
fuente
file *comandofile --mime-encodingobtener la codificación del archivoOtra herramienta que encontré útil: https://archive.codeplex.com/?p=encodingchecker EXE se puede encontrar aquí
fuente
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
asciicuando no hay BOM presente (como la mayoría de los editores de texto, el valor predeterminado seríaUTF8si 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 .
Recomendación: Esto puede funcionar razonablemente bien si el
dir,lsoGet-ChildItemsó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).fuente
Get-FileEncodingno parece existir en mi sistema. ¿Es un cmdlet personalizado?Get-FileEncodingposhcode. Incluso he revisado punycode de python y nodejs, pero esta versión pequeña alcanza 80/20 para mi uso (más como 99/1). Si aloja los archivos de otras personas, le sugiero que use elfilecomando de la respuesta de Syben ( stackoverflow.com/a/34766140/195755 ) u otro decodificador Unicode de calidad de producción.defaultcodificando (cuando no hay BOM). Para XML, JSON y JavaScript, el valor predeterminado es UTF8, pero su kilometraje puede variar.Escribí la respuesta # 4 (al momento de escribir). Pero últimamente tengo instalado git en todas mis computadoras, así que ahora uso la solución de @ Sybren. Aquí hay una nueva respuesta que hace que la solución sea útil desde powershell (sin poner todo git / usr / bin en la RUTA, lo cual es demasiado desorden para mí).
Agregue esto a su
profile.ps1:Y se utiliza como:
file.exe --mime-encoding *. Usted debe incluir .exe en el comando para PS alias para el trabajo.Pero si no personaliza su PowerShell profile.ps1, le sugiero que comience con el mío: https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0 y guárdelo en
~\Documents\WindowsPowerShell. Es seguro usarlo en una computadora sin git, pero escribirá advertencias cuando no se encuentre git.El .exe en el comando también es cómo lo uso
C:\WINDOWS\system32\where.exedesde powershell; y muchos otros comandos de la CLI del sistema operativo que están "ocultos por defecto" por powershell, * shrug *.fuente
filecomo su alias para file.exe en lugar defile.exe¯ \ _ (ツ) _ / ¯dir | where Size -lt 10000vswhere.exe git.where.exepara diferenciarlo dewherePS, que es un alias incorporado paraWhere-Object. Ejemplo:where.exe git*vsls . | where Size -lt 10000file.exela clase estática vs .NET, que podría necesitar en el mismo script que detecta la codificación. Ejemplo:[File]::SetCreationTime("readme.md", [DateTime]::Now).Una solución simple podría ser abrir el archivo en Firefox.
y la codificación de texto aparecerá en la ventana "Información de la página".
Nota: Si el archivo no está en formato txt, simplemente cámbiele el nombre a txt e intente nuevamente.
PD Para más información ver este artículo.
fuente
Instale git (en Windows debe usar la consola git bash). Tipo:
para todos los archivos en el directorio actual, o
para los archivos en todos los subdirectorios
fuente
Puede usar una utilidad gratuita llamada Encoding Recognizer (requiere Java). Puede encontrarlo en http://mindprod.com/products2.html#ENCODINGRECOGNISER
fuente
Similar a la solución enumerada anteriormente con el Bloc de notas, también puede abrir el archivo en Visual Studio, si lo está usando. En Visual Studio, puede seleccionar "Archivo> Opciones avanzadas de guardado ..."
El cuadro combinado "Codificación:" le dirá específicamente qué codificación se está utilizando actualmente para el archivo. Tiene muchas más codificaciones de texto enumeradas allí que el Bloc de notas, por lo que es útil cuando se trata con varios archivos de todo el mundo y cualquier otra cosa.
Al igual que el Bloc de notas, también puede cambiar la codificación de la lista de opciones allí, y luego guardar el archivo después de presionar "Aceptar". También puede seleccionar la codificación que desee a través de la opción "Guardar con codificación ..." en el cuadro de diálogo Guardar como (haciendo clic en la flecha al lado del botón Guardar).
fuente
Algún código C aquí para una detección confiable de ascii, bom's y utf8: https://unicodebook.readthedocs.io/guess_encoding.html
EDITAR:
Una versión de PowerShell de una respuesta de C # de: forma efectiva de encontrar la codificación de cualquier archivo . Solo funciona con firmas (boms).
fuente
La única forma en que he encontrado para hacer esto es VIM o Notepad ++.
fuente