用 C# 从剪贴板里复制并保存 Html 内容
文章目录
在客户端开发中,都涉及到大量类似的需求:从剪贴板里拷贝内容出来,复制内容到剪贴板,甚至有的时候,还需要针对富文本格式(如 Html 格式)来进行操作。用 C# 来实现此类功能特别简单,下面就对此类操作进行简单概述,主要是在 C# 的 Clipboard 类上做文章。
如果你直接从网页上复制了一段 Html 内容到剪贴板,则可以通过 C# 用下面的方式来获取 html 源文件:
string format = "TextDataFormat.Html";
if (Clipboard.ContainsText(TextDataFormat.Html))
{
String returnHtmlText = null;
returnHtmlText = Clipboard.GetText(TextDataFormat.Html);
}
但是直接用上述代码,在处理中文 Html 的时候,获取的内容可能会是乱码。这个时候,我们可以人工转换编码来解决这个问题,例子代码如下:
if (Clipboard.ContainsText(TextDataFormat.Html)) { String returnHtmlText = null; MemoryStream vMemoryStream = Clipboard.GetData("Html Format") as MemoryStream; vMemoryStream.Position = 0; byte[] vBytes = new byte[vMemoryStream.Length]; vMemoryStream.Read(vBytes, 0, (int)vMemoryStream.Length); returnHtmlText = Encoding.UTF8.GetString(vBytes); }
但是,如果你直接把通过上面获取的 Html 代码存成 Html 文件,那么打开这个 html 文件后,有可能依然会获得一个乱码文件,因为你没有给这个文件加上合适的 Html 头来让浏览器获取正确的编码格式。因为通过 Clipboard 获取的 Html 文本比较正规,对获取的文本加 Html 头的操作,可以简单地使用一个字符串替换来实现:
//adding <header> in html string header = @"<html><head><meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" /></head>"; returnHtmlText = returnHtmlText.Replace("<html>", header);
把所有代码合并在一起,就形成一个完整的获取剪贴板 Html 内容的程序:
if (Clipboard.ContainsText(TextDataFormat.Html)) { String returnHtmlText = null; MemoryStream vMemoryStream = Clipboard.GetData("Html Format") as MemoryStream; vMemoryStream.Position = 0; byte[] vBytes = new byte[vMemoryStream.Length]; vMemoryStream.Read(vBytes, 0, (int)vMemoryStream.Length); returnHtmlText = Encoding.UTF8.GetString(vBytes); //adding <header> in html string header = @"<html><head><meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" /></head>"; returnHtmlText = returnHtmlText.Replace("<html>", header); }
对上述获得的 Html 字符串还可以进行后续操作,比如说显示、保存为网页文件等。当然,上述代码只是一个原型,需要更多的加工才能被正常使用在实际项目中。
文章作者 cookwhy
上次更新 2012-06-12