2013-05-16 12 views

答えて

2

HtmlDecodeは、HTMLでエンコードされた文字列を読み込み可能な文字列形式に変換するためのものです。おそらくHtmlEncodeがあなたが実際に探しているものかもしれません。

+2

私はOPが '' ''の代わりに '•'を見たいと思っています。 – Musa

+0

ああ、それは*文字*ではないということです。 – pcnThird

+0

どのように '' ''に翻訳されますか?箇条書きのHTML表現は '•'です - 何か不足していますか? –

5

ここでの問題は、HTMLのデコードではなく、テキストが1つの文字セット(Windows-1252など)でエンコードされ、次に2番目(UTF-8)として再度エンコードされたことです。

UTF-8では、は、E2 80 A2としてデコードされます。このバイトシーケンスがwindows-1252エンコーディングを使用して読み取られるとき、E2 80 A2•としてエンコードします。

ファイルがWindows-1252でエンコードされたファイルの場合、ファイルは正しいエンコーディングで簡単に読み取ることができます(StreamReaderコンストラクタの引数など)。 :

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

ファイルが誤ったエンコードで保存された場合、エンコードが逆転することがあります。例えば、あなたの質問内の文字列の順序のために、あなたが書くことができます。

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 = `•` 

注意を多くの一般的な非印字文字が範囲内にあることをU+2000な「スマート引用符」、弾丸、およびダッシュなどU+2044Reference)、へ。従って、配列â€??は任意の文字)は、通常、このタイプのエンコーディングエラーを示します。これは、このタイプのエラーは、より広く補正することができる。この方法で不正な形式のテキストでこの関数を呼び出す

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

は、いくつかの(すべてではない)エラーを修正します。たとえば、CorrectText("•Test–or“")は、•Test–or“を返します。