Convertire la codifica dei caratteri di una stringa da windows-1252 a utf-8

Avevo convertito un documento di Word (docx) in html, l’html convertito ha windows-1252 come codifica dei caratteri. In .Net per questa codifica di caratteri 1252 tutti i caratteri speciali vengono visualizzati come ‘ ‘. Questo html viene visualizzato in un editor Rad che viene visualizzato correttamente se l’html è in formato Utf-8.

Avevo provato il seguente codice ma senza vena

Encoding wind1252 = Encoding.GetEncoding(1252); Encoding utf8 = Encoding.UTF8; byte[] wind1252Bytes = wind1252.GetBytes(strHtml); byte[] utf8Bytes = Encoding.Convert(wind1252, utf8, wind1252Bytes); char[] utf8Chars = new char[utf8.GetCharCount(utf8Bytes, 0, utf8Bytes.Length)]; utf8.GetChars(utf8Bytes, 0, utf8Bytes.Length, utf8Chars, 0); string utf8String = new string(utf8Chars); 

Qualche suggerimento su come convertire l’html in UTF-8?

Questo dovrebbe farlo:

 Encoding wind1252 = Encoding.GetEncoding(1252); Encoding utf8 = Encoding.UTF8; byte[] wind1252Bytes = wind1252.GetBytes(strHtml); byte[] utf8Bytes = Encoding.Convert(wind1252, utf8, wind1252Bytes); string utf8String = Encoding.UTF8.GetString(utf8Bytes); 

In realtà il problema sta qui

 byte[] wind1252Bytes = wind1252.GetBytes(strHtml); 

Non dovremmo ottenere i byte dalla stringa html. Ho provato il codice qui sotto e ha funzionato.

 Encoding wind1252 = Encoding.GetEncoding(1252); Encoding utf8 = Encoding.UTF8; byte[] wind1252Bytes = ReadFile(Server.MapPath(HtmlFile)); byte[] utf8Bytes = Encoding.Convert(wind1252, utf8, wind1252Bytes); string utf8String = Encoding.UTF8.GetString(utf8Bytes); public static byte[] ReadFile(string filePath) { byte[] buffer; FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); try { int length = (int)fileStream.Length; // get file length buffer = new byte[length]; // create buffer int count; // actual number of bytes read int sum = 0; // total number of bytes read // read until Read method returns 0 (end of the stream has been reached) while ((count = fileStream.Read(buffer, sum, length - sum)) > 0) sum += count; // sum is a buffer offset for next reading } finally { fileStream.Close(); } return buffer; } 

Come prevedi di utilizzare l’html risultante? Il modo più appropriato secondo me per risolvere il tuo problema sarebbe aggiungere meta con specifiche di codifica. Qualcosa di simile a:

  

Usa il metodo Encoding.Convert . I dettagli sono nell’articolo MSDN del metodo Encoding.Convert .