2014-12-24 11 views
5

Perché si vede punti di domanda nella finestra di messaggio al posto del testoPerché si mostrano punti interrogativi sulla finestra di messaggio al posto del testo

enter image description here

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://teamxor.net/vb/tx48/"+ page); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

StreamReader sr = new StreamReader(response.GetResponseStream()); 

string result = sr.ReadToEnd(); 

Regex r = new Regex("<div>.*?</div>"); 
MatchCollection mr = r.Matches(result); 

foreach (Match m in mr) 
{ 
    MessageBox.Show(m.Value, "Test", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading); 
}  
+1

Sembra un problema di codifica. Puoi per favore mostrare anche il tuo lavoro? –

+4

Utilizza Unicode, Luke. –

+0

Controlla font e codifica. – danish

risposta

5

il problema risiede nell'uso di un non -codice di codice predefinito. Il tuo HTML mostra che si sta utilizzando il codice delle pagine 1256. Devi dire .NET che, altrimenti pensa che è UTF-8:

StreamReader sr = new StreamReader(response.GetResponseStream() 
            , Encoding.GetEncoding(1256) // <-- this one 
           ); 

Usa Encoding.GetEncoding per ottenere la pagina di codice giusto. Suggerisco di usare UTF8, poiché è facilmente riconoscibile da .NET.

+1

In realtà, poiché questa è una risposta Web, l'OP deve sempre controllare e utilizzare l'intestazione 'charset' –

+0

Incredibile grazie :) –

+0

@PanagiotisKanavos: intendi l'intestazione HTML? Penso che sia già troppo tardi per quello in quel momento. –

4

I server Web possono restituire una risposta in qualsiasi codifica che desiderano, anche se in genere scelgono una codifica che corrisponde alla lingua preferita del browser.

La codifica utilizzata viene restituita come elemento charset dell'intestazione Content-Type. In .NET è possibile recuperare la codifica utilizzata dalla proprietà HttpWebResponse.CharacterSet. È possibile utilizzare il charset restituito per creare un oggetto Encoding da utilizzare per leggere la risposta:

var charset= response.CharacterSet; 
var encoding = Encoding.GetEncoding(charset); 
var sr= new StreamReader(response.GetResponseStream(),encoding); 
.... 
Problemi correlati