Преобразование строковой кодировки символов из windows-1252 в utf-8

Я преобразовал Word Document (docx) в html, преобразованный html имеет в качестве кодировки символов Windows-1252. В .Net для этой 1252-символьной кодировки все специальные символы отображаются как "". Этот html отображается в редакторе Rad, который отображается правильно, если html находится в формате Utf-8.

Я пробовал следующий код, но без вены

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);

Любые предложения по преобразованию html в UTF-8?

Ответ 1

На самом деле проблема здесь

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

Мы не должны получать байты из строки html. Я попробовал приведенный ниже код, и он сработал.

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;
    }

Ответ 2

Это должно сделать это:

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);

Ответ 3

Как вы планируете использовать итоговый html? Самый подходящий способ, по моему мнению, решить вашу проблему - добавить meta с спецификацией кодирования. Что-то вроде:

<meta http-equiv="content-type" content="text/html;charset=UTF-8" />