Detectar la codificación UTF-8 (¿Cómo lo hace MS IDE)?

Un problema con varias codificaciones de caracteres es que el archivo que contiene no siempre está claramente marcado. Existen convenciones inconsistentes para marcar algunos usando "marcadores de orden de bytes" o listas de materiales. Pero en esencia hay que serlo.dicho Qué es la codificación del archivo, para leerlo con precisión.

Construimos herramientas de programación que leen archivos de origen, y esto nos da pena. Tenemos medios para especificar los valores predeterminados y para detectar listas de materiales, etc. Y lo hacemos bastante bien con las convenciones y los valores predeterminados. Pero un lugar en el que nosotros (y supongo que todos los demás) queda colgado son los archivos UTF-8 que no están marcados como BOM.

Los IDE de MS recientes (por ejemplo, VS Studio 2010) aparentemente "rastrearán" un archivo para determinar si está codificado en UTF-8 sin una lista de materiales. (Al estar en el negocio de las herramientas, nos gustaría ser compatibles con la EM debido a su participación en el mercado, incluso si eso significa tener que pasar por el precipicio "estúpido" con ellos). Estoy especialmente interesado en lo que usan como ¿Heurística (aunque las discusiones sobre heurísticas están bien)? ¿Cómo puede ser "correcto"? (Considere una cadena codificada ISO8859-x interpretada de esta manera).

EDITAR: Este documento sobre la detección de codificaciones / conjuntos de caracteres es bastante interesante:http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html

EDITAR Diciembre de 2012: Terminamos de escanear todo el archivo para ver si contenía alguna violación de las secuencias UTF-8 ... y si no lo hace, lo llamamos UTF-8. La parte mala de esta solución es que tienes que procesar los caracteres dos veces si es UTF-8. (Si no es UTF-8, es probable que esta prueba lo determine con bastante rapidez, a menos que el archivo pase a todos los ASCII de 7 bits, momento en el que la lectura como UTF-8 no se verá afectada).

Respuestas a la pregunta(2)

Su respuesta a la pregunta