C#UTF-8编码问题

时间:2009-09-26 20:20:53

标签: c# encoding utf-8

我在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Â程序”

我做错了什么,误解了什么,或问题出在其他地方?

感谢您的帮助!

2 个答案:

答案 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;” 在“广告”和“节目”之间。

使用“业务解决方案”文本尝试使用您的代码,它会起作用。

最有可能你需要用正常空格替换nbsp。