我在这里对堆栈溢出搜索职位,并阅读JoelOnSoftware对编码后,现在有编码问题一个基本的把握。但是我遇到了来自Windows剪贴板的一些字符编码问题。C#UTF-8编码的问题
的重复性测试是使用IE浏览器,并选择从谷歌主页复制“广告程序”文本。
我使用下面的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Â程序”
我做错了什么,误解了什么,或者问题出在别处?
感谢您的帮助!
嗯,我想这会导致两个问题: 1.如果Encoding类知道它采用UTF-8并输出Unicode(UTF-16?)字符串,是否应该知道如何将UTF-8中的C2 A0转换为Unicode中 的正确表示形式?我假设我误解了基本级别的编码问题。关闭做更多的研究... 2.我最终将字符串编码回UTF-8以在浏览器中呈现。为了方便解析,我只转换为.NET字符串。有没有更好的方式来解析文本的原生UTF-8编码? – 2009-09-26 22:10:03
查看我的编辑..................... – 2009-09-26 23:55:18
优秀!这个诀窍 - 感谢一堆指针! – 2009-09-27 05:14:30