在这种情况下,它不像我的情况那么明显。今天,我试图从剪贴板复制数据,但有一些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)
(现在我所有的代码失败在解析数据,还有一个问题,以确定应用程序与修复已经应用。查阅全文,并没有固定正确的行为。)