writealltext utf8 read example createtext create change c# encoding ansi

utf8 - encoding utf-8 c#



Cómo leer un archivo codificado ANSI que contiene caracteres especiales (2)

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

Mi problema es que nuestro encabezado de archivo contiene un carácter especial "©" y lamentablemente 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 2009".

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

Me cansé de cambiar la codificación de la cuerda, pero no ayuda. Entonces, ¿cómo puedo leer estos archivos, que obtengo la cadena correcta "Copyright © 2009"?

¡Gracias por la ayuda!

Saludos Eny


Parecería sensato si vas a tener tales políticas que también tendrías la codificación estándar acordada por el equipo. Para ser sincero, no puedo entender por qué un equipo usaría una codificación distinta a "Unicode (UtF-8 con firma) - Página de códigos 65001" (excepto tal vez para páginas ASPX con contenido estático significativo no latino, pero incluso entonces puedo " T ver cómo sería un gran problema usar UTF-8).

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

De ahí el uso

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

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

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


Usar Encoding.Default . Por Encoding.Default :

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

Sin embargo, debe tener en cuenta que eso lo lee usando 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 las personas hablan sobre "la codificación ANSI" quieren decir la página del código 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.