¿Cómo sé qué codificación está utilizando un lenguaje de programación, un archivo de lenguaje de marcado o un archivo de texto simple? Responda con respecto a .PHP, .xml, .txt.

Dado que esta pregunta está etiquetada como “Aprender a programar”, y está preguntando sobre PHP específicamente, agregaré lo que otros han dicho al señalarle la documentación de PHP para la función mb_detect_encoding (abreviatura de codificación de detección de múltiples bytes).

Las codificaciones como Unicode son de varios bytes, lo que significa que pueden codificar un carácter (punto de código) como múltiples bytes, pero lo hacen de diferentes maneras. UTF-8 es diferente de UTF-16 en la forma en que codifican caracteres multibyte, intercambian velocidad de decodificación versus tamaño de almacenamiento, etc.

De todos modos, como señalaron otras personas, no puedes saber cuál es la codificación, pero puedes adivinar bastante bien; que es lo que hace esa función PHP. Tomará una muestra de la cadena que le dé y trabajará en la lista de codificaciones hasta que encuentre pruebas de que es o no la codificación que está buscando. Otros idiomas tienen funciones similares.

Para que un programa tenga una buena oportunidad de adivinar la codificación, ayuda si sabe algo sobre la estructura del archivo. A veces, un programa puede mantener una base de datos de “cadenas mágicas” que puede buscar en un archivo para determinar su tipo y codificación. Esto es lo que hace el comando de archivo en Linux.

Para aplicaciones más simples, puede hacer suposiciones basadas en el contenido esperado, por ejemplo XML. Un documento XML bien formado debe comenzar con un signo menor que (para comenzar la primera etiqueta), o una Marca de orden de bytes (BOM) seguida de la misma. Si espera un XML bien formado y no lo encuentra al principio, es seguro rescatar ese archivo.

Parafraseando a Gingerbread Man: No puedes saber que es XML, pero sabes que no es XML.

En general, no. Este es el por qué:

Cualquier texto es una secuencia de bytes y la mayoría de los idiomas del mundo usan más de un byte para codificar sus símbolos. La codificación es una forma de interpretar secuencias de bytes como símbolos. Hay tantas formas de interpretar una secuencia de bytes como codificaciones.

Pero en la mayoría de los casos, la codificación no forma parte de la secuencia de bytes y debe proporcionarse por separado.

Dicho esto, cuando crea un archivo y lo guarda, estará en la codificación predeterminada de la herramienta que utilizó para crear este archivo. Algunos editores de texto le permitirán controlarlo, otros no.

A menudo puede crear su archivo usando una codificación distinta a la predeterminada. Por ejemplo, si escribe código Java en Windows, es posible que desee guardar archivos Java en utf-8.

Si descargó un archivo que no especifica la codificación, utilizando una herramienta independiente de codificación como ftp, no conoce la codificación y su suposición es tan buena como la mía. Hay herramientas que pueden adivinar la codificación cuando se le da un texto lo suficientemente largo.

Pero no es tan malo, de verdad. La mayoría de las herramientas que la gente usa para crear y descargar archivos en estos días impondría y admitiría la codificación. Es especialmente cierto para el tipo de archivo que está preguntando, especialmente si están en inglés.

Para un caso general, una herramienta que adivina la codificación intentará interpretar el texto probando las codificaciones que conoce. Si encuentra secuencias de bytes que no son válidas para una codificación determinada, intentará la siguiente codificación conocida, hasta que no haya secuencias no válidas. La herramienta determinará la codificación y le dirá la probabilidad de que sea una suposición correcta, de modo que usted decida si acepta esta suposición o no.

Uno puede crear fácilmente un archivo que establece una cierta codificación, como un archivo XML, y guardarlo usando una codificación diferente. No sucede muy a menudo, pero cuando sucede, las herramientas fallan misteriosamente.

Abra su archivo en un editor de texto decente …

Esto funcionará para .php, .xml y cualquier otro tipo de archivo de texto, un archivo .php es solo un archivo de texto sin formato con una extensión de archivo diferente.

Si desea averiguar mediante programación, entonces es un poco más complicado, algunas codificaciones tienen ‘Marcas de orden de bytes’, pero la mayoría no, hay un poco más de discusión sobre eso aquí …

Cómo determinar la codificación de archivos de texto