Domanda

L'immagine seguente spiega tutto:

alt text http://img133.imageshack.us/img133/4206/accentar9 .png

La variabile textInput proviene da File.ReadAllText (path); e caratteri come: 'é è ... non vengono visualizzati. Quando eseguo il mio UnitTest, va tutto bene! Li vedo ... Perché?

È stato utile?

Soluzione 3

Non so perché funziona con NUnit, ma apro il file con NotePad ++ e vedo ANSI nel formato. Ora mi sono convertito in UTF-8 e funziona.

Mi sto ancora chiedendo perché funzionasse con NUnit e non con la console? ma almeno funziona ora.

Aggiorna Non capisco perché vengo meno votato sulla domanda e in questa risposta perché la domanda è ancora buona, perché in una console non riesco a leggere un file ANSI ma in NUNit posso?

Altri suggerimenti

Le classi .NET ( System.IO.StreamReader e simili) prendono UTF-8 come codifica predefinita. Se vuoi leggere una codifica diversa, devi passare esplicitamente al sovraccarico del costruttore appropriato.

Si noti inoltre che non esiste un'unica codifica denominata "ANSI". Probabilmente ti riferisci alla codepage di Windows 1252 nota anche come "Europa occidentale". Si noti che questo è diverso dalla codifica predefinita di Windows in altri paesi. Ciò è rilevante quando si tenta di utilizzare System.Text.Encoding.Default perché in realtà differisce da sistema a sistema.

/ EDIT: sembra che tu abbia frainteso sia la mia risposta che il mio commento:

  1. Il problema nel tuo codice è che devi dire a .NET quale codifica stai usando.
  2. L'altra osservazione, che afferma che "ANSI" può riferirsi a diverse codifiche, non ha avuto nulla a che fare con il tuo problema. Era solo un'osservazione "a proposito" per prevenire incomprensioni (beh, quella fallita).

Quindi, finalmente: la soluzione al tuo problema dovrebbe essere il seguente codice:

string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));

La parte importante qui è l'uso di un'istanza System.Text.Encoding appropriata.

Tuttavia, questo presuppone che la tua codifica sia effettivamente Windows-1252 (ma credo sia questo che Notepad ++ significa "ANSI"). Non ho idea del perché il tuo testo venga visualizzato correttamente quando letto da NUnit. Suppongo che NUnit abbia un qualche tipo di individuazione automatica per le codifiche di testo o che NUnit usi alcuni strani valori predefiniti (cioè non UTF-8).

Oh, e comunque: "ANSI" si riferisce in realtà all'American National Standards Institute. Ci sono molti standard completamente diversi che hanno "ANSI" come parte dei loro nomi. Ad esempio, C ++ è (tra gli altri) anche uno standard ANSI.

Solo in alcuni contesti viene (imprecisamente) usato per fare riferimento alle codifiche di Windows. Ma anche lì, come ho cercato di spiegare, di solito non si riferisce a una codifica specifica ma piuttosto a una classe di codifiche che Windows utilizza come valori predefiniti per diversi paesi. Uno di questi è Windows-1252.

Prova a impostare la pagina di codice di output della sessin della tua console utilizzando chcp comando. Le pagine di codice supportate da Windows sono qui , qui e qui . Ricorda, fondamentalmente la console è piuttosto semplice: mostra i caratteri UNCICODE o DBCS usando una tabella codici per eliminare il glifo che verrà visualizzato.

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