我在Stack Overflow上搜索了帖子,并阅读了JoelOnSoftware关于编码的帖子,现在已经基本掌握了编码问题。但是我遇到了一些来自Windows剪贴板的字符编码问题。
可重现的测试是使用IE并从Google主页选择并复制“广告计划”文本。
我正在使用以下C#代码将此文本从剪贴板中删除(错误检查已删除):
uint FormatId = GetRegisteredClipboardFormatId("HTML Format");
IntPtr hHtml = Win32.GetClipboardData(FormatId);
uint DataSize = Win32.GlobalSize(hHtml);
byte[] HtmlData = new byte[DataSize];
IntPtr pData = Win32.GlobalLock(hHtml);
Marshal.Copy(pData, HtmlData, 0, (int)DataSize);
Win32.GlobalUnlock(hHtml);
剪贴板HTML数据应该是UTF-8编码的,所以我使用以下内容将数据转换为字符串:
string Content = Encoding.UTF8.GetString(HtmlData);
但是,忽略周围的HTML标记,结果是:
“AdvertisingÂ程序”
我做错了什么,误解了什么,或问题出在其他地方?
感谢您的帮助!
答案 0 :(得分:6)
您正在将UTF-8显示为Latin-1或其变体(CP1252)。
Google在该句中使用了一个句号,即C2 A0,恰好是拉丁语-1中的“Â
”。
content
时会出现问题。看起来你输出的是UTF-8,但是显示媒体正在期待Latin-1。
如果您使用控制台进行显示,请尝试使用
Console.OutputEncoding = Encoding.GetEncoding("iso-8859-1");
这将告诉控制台发送Latin-1而不是UTF-8。
如果您在浏览器中显示文字,请确保网页标有UTF-8,例如
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
答案 1 :(得分:0)
检查HTML代码。有“
”
在“广告”和“节目”之间。
使用“业务解决方案”文本尝试使用您的代码,它会起作用。
最有可能你需要用正常空格替换nbsp。