Domanda

Sto scrivendo una politica di checkin TFS, che controlla se i nostri file sorgente contengono la nostra intestazione.

Il mio problema è che la nostra intestazione del file contiene un carattere speciale " © " e sfortunatamente alcuni dei nostri file sorgente sono codificati in ANSI. Quindi, se leggo questi file nella norma, la stringa è simile a questa " Copyright & # 65533; 2009 ".

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

Sono stanco di cambiare la codifica della stringa, ma non aiuta. Quindi, come posso leggere questi file per ottenere la stringa corretta " Copyright © 2009 " ;?

Grazie per l'aiuto!

Saluti Eny

È stato utile?

Soluzione

Usa Encoding.Default :

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

Dovresti essere consapevole, tuttavia, che ciò lo legge usando la codifica predefinita del sistema, che potrebbe non essere la stessa codifica del file. Non esiste una singola codifica chiamata ANSI, ma di solito quando le persone parlano di " la codifica ANSI " significano la pagina di codice di Windows 1252 o qualunque altra casella venga utilizzata.

Il tuo codice sarà più efficace se puoi scoprire la codifica esatta utilizzata.

Altri suggerimenti

Sembrerebbe ragionevole se tu avessi tali politiche da avere anche una codifica standard concordata dal team. Ad essere sincero, non riesco a capire perché una squadra dovrebbe usare una codifica diversa da " Unicode (UtF-8 con firma) - Codepage 65001 " (tranne forse per le pagine ASPX con un contenuto statico non latino significativo ma anche allora non riesco a vedere come sarebbe un grosso problema usare UTF-8).

Supponendo che si desideri ancora consentire codifiche miste, è quindi necessario un modo per determinare in quale codifica è stato salvato un file in modo da sapere quale codifica passare a ReadAllText . Non è facile determinarlo dal file, tuttavia è probabile che usando Encoding.Default funzioni bene. Poiché è molto probabile che tu abbia solo 2 codifiche da gestire, il VS (UTF-8 con firma) e una codifica ANSI comune usata dai tuoi computer (probabilmente Windows-1252).

Quindi usando

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

funzionerà. (Come vedo Jon ha già pubblicato). Questo funziona perché quando la distinta base UTF-8 (che è ciò che VS indica con il termine "firma") è presente all'inizio del file, il parametro di codifica fornito viene ignorato e UTF-8 viene comunque utilizzato. Quindi, dove il file viene salvato utilizzando UTF-8, si ottengono risultati corretti e dove ANSI viene utilizzato, è molto probabile che si ottengano anche risultati corretti.

A proposito, se stai elaborando le intestazioni dei file ReadAllLines non semplificherebbe le cose ?.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top