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.
- ¿Cuál es el futuro del desarrollador de PHP en términos de caminata y éxito?
- Como desarrollador web, ¿qué herramientas consideró una pérdida de tiempo y cuáles son esenciales?
- C ++: ¿Tiene sentido convertirse en desarrollador de C ++?
- ¿Qué es bootstrapping en Angular o el proceso de ejecución?
- ¿Qué versión angular debo aprender para iónico?
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.