2013-05-16 58 views

Trả lời

2

HtmlDecode là để chuyển đổi chuỗi được mã hóa Html thành định dạng chuỗi có thể đọc được. Có lẽ HtmlEncode có thể là những gì bạn đang thực sự tìm kiếm.

+2

Tôi nghĩ OP muốn xem '•' thay vì 'â € ¢' – Musa

+0

Ah có .. nó nói * ký tự * chứ không phải ký tự. – pcnThird

+0

Làm thế nào để 'dịch' sang '•'? Biểu diễn html của dấu đầu dòng là '•' - hoặc tôi thiếu cái gì? –

5

Vấn đề ở đây không phải là giải mã HTML, mà đúng hơn là văn bản được mã hóa trong một bộ ký tự (ví dụ: windows-1252) và sau đó được mã hóa lại thành một ký tự thứ hai (UTF-8).

Trong UTF-8, được giải mã là E2 80 A2. Khi chuỗi byte này được đọc bằng cách sử dụng mã hóa windows-1252, E2 80 A2 mã hóa là •. (Đã lưu lại dưới dạng UTF-8 • trở thành C3 A2 E2 82 AC C2 A2 20 54 65 73 74.)

Nếu tệp là tệp được mã hóa cửa sổ-1252, tệp có thể được đọc bằng mã hóa chính xác (ví dụ như đối số cho hàm tạo StreamReader). :

new StreamReader(..., Encoding.GetEncoding("windows-1252")); 

Nếu tệp được lưu với mã hóa không đúng, mã hóa có thể được đảo ngược trong một số trường hợp. Ví dụ, đối với trình tự chuỗi trong câu hỏi của bạn, bạn có thể viết:

string s = "•"; // the string sequence that is not properly encoded 
var b = Encoding.GetEncoding("windows-1252").GetBytes(s); // b = `E2 80 A2` 
string c = Encoding.UTF8.GetString(b); // c = `•` 

Lưu ý rằng nhiều nhân vật không in phổ biến là trong phạm vi U+2000-U+2044 (Reference), chẳng hạn như "dấu ngoặc kép thông minh", đạn, và dấu gạch ngang . Do đó, trình tự â€?, trong đó ? là bất kỳ ký tự nào, thường sẽ biểu thị loại lỗi mã hóa này. Điều này cho phép loại hình này lỗi để được sửa chữa một cách rộng rãi hơn:

static string CorrectText(string input) 
{ 
    var winencoding = Encoding.GetEncoding("windows-1252"); 
    return Regex.Replace(input, "â€.", 
     m => Encoding.UTF8.GetString(winencoding.GetBytes(m.Value))); 
} 

gọi hàm này với các văn bản bị thay đổi theo cách này sẽ sửa một số lỗi (nhưng không phải tất cả). Ví dụ: CorrectText("•Test–or“") sẽ trả lại mục đích •Test–or“.

Các vấn đề liên quan