在這種情況下,它不像我的情況那麼明顯。今天,我試圖從剪貼板複製數據,但有一些unicode字符。我得到的數據好像我會在Windows-1250編碼(本地編碼在我的Windows中)中讀取UTF-8編碼文件。
看來你的情況是一樣的。如果您保存html數據(請記住在Â字符之後放置不可破壞的空間= 0xa0,而不是標準空間)在Windows-1252 (或Windows-1250;兩者都可用)。然後打開這個文件作爲一個UTF-8文件,你會看到應該有什麼。
對於我的其他項目,我做了一個修復數據與損壞的編碼功能。
在這種情況下,簡單的轉換應該足夠了:
byte[] data = Encoding.Default.GetBytes(text);
text = Encoding.UTF8.GetString(data);
我最初的功能是多一點點複雜,其中包含測試,以確保數據不被損壞......
public static bool FixMisencodedUTF8(ref string text, Encoding encoding)
{
if (string.IsNullOrEmpty(text))
return false;
byte[] data = encoding.GetBytes(text);
// there should not be any character outside source encoding
string newStr = encoding.GetString(data);
if (!string.Equals(text, newStr)) // if there is any character "outside"
return false; // leave, the input is in a different encoding
if (IsValidUtf8(data) == 0) // test data to be valid UTF-8 byte sequence
return false; // if not, can not convert to UTF-8
text = Encoding.UTF8.GetString(data);
return true;
}
我知道這不是最好的(或正確的解決方案),但我沒有找到任何其他方式如何解決輸入...
編輯:(2017年7月20日)
這似乎是微軟已經發現了這個錯誤,現在它工作正常。我不確定這個問題是否出現在某些框架中,但是我確實知道,當我編寫答案時,現在應用程序使用了不同的框架。 (現在是4.5;上一版本爲2.0)
(現在我所有的代碼失敗在解析數據,還有一個問題,以確定應用程序與修復已經應用。查閱全文,並沒有固定正確的行爲。)