Pregunta

Estoy escribiendo una política de Registro de TFS, que verifica si nuestros archivos fuente contienen nuestro encabezado de archivo.

Mi problema es que nuestro encabezado de archivo contiene un carácter especial " & # 169; " y desafortunadamente algunos de nuestros archivos fuente están codificados en ANSI. Entonces, si leo estos archivos en la política, la cadena se ve así '' Copyright '' # 65533; 2009 " ;.

string content = File.ReadAllText(pendingChange.LocalItem);

Me cansé de cambiar la codificación de la cadena, pero no ayuda. Entonces, ¿cómo puedo leer estos archivos para obtener la cadena correcta "Copyright" # 169; 2009 " ;?

¡Gracias por la ayuda!

Saludos Eny

¿Fue útil?

Solución

Use Encoding.Default :

string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

Sin embargo, debe tener en cuenta que eso se lee utilizando la codificación predeterminada del sistema, que puede no ser la misma que la codificación del archivo. No hay una codificación única llamada ANSI, pero generalmente cuando la gente habla de "la codificación ANSI" se refieren a la página de códigos de Windows 1252 o lo que sea que su caja use.

Su código será más robusto si puede encontrar la codificación exacta utilizada.

Otros consejos

Parecería sensato tener políticas de este tipo que también tendrían una codificación estándar acordada por el equipo. Para ser honesto, no puedo ver por qué un equipo usaría una codificación que no sea '' Unicode (UtF-8 con firma) - Página de códigos 65001 '' (excepto quizás para las páginas ASPX con contenido estático no latino significativo, pero aun así no puedo ver cómo sería un gran problema usar UTF-8).

Suponiendo que todavía desea permitir codificaciones mixtas, entonces necesita una forma de determinar en qué codificación se guardó un archivo para saber qué codificación pasar a ReadAllText . No es fácil determinar esto a partir del archivo, sin embargo, usar Encoding.Default es probable que funcione bien. Como es muy probable que solo tenga que lidiar con 2 codificaciones, el VS (UTF-8 con firma) y una codificación ANSI común utilizada por sus máquinas (probablemente Windows-1252).

Por lo tanto, usando

 string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

funcionará. (Como veo Jon ya ha publicado). Esto funciona porque cuando la lista de materiales UTF-8 (que es lo que VS quiere decir con el término "firma") está presente al comienzo del archivo, el parámetro de codificación suministrado se ignora y UTF-8 se usa de todos modos. Por lo tanto, cuando el archivo se guarda usando UTF-8, obtiene resultados correctos y donde se usa ANSI, es muy probable que también obtenga resultados correctos.

Por cierto, si está procesando encabezados de archivo, ¿no ReadAllLines facilitaría las cosas?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top