C# WinForms中如何将API返回的HTML转为RichTextBox可显示文本
解决方案:将Bionic Reading API的HTML响应转换为文本/带格式内容显示在RichTextBox
现有代码的问题
你的ConvertHtmlToRtf方法逻辑有误:RichTextBox无法直接解析HTML内容,当你把HTML赋值给txtnote.Text时,控件只会显示原始的HTML文本,再将其保存为RTF也只是把HTML文本转成了RTF格式,并没有解析HTML的格式。另外,请求参数里的content={0}.多了一个多余的点,且未对输入文本做URL编码,可能导致请求参数异常。
方案1:转为纯文本(无格式)
如果不需要保留Bionic Reading的加粗效果,仅提取纯文本,推荐使用HtmlAgilityPack(比正则更可靠):
- 安装NuGet包
HtmlAgilityPack - 修改成功响应后的代码:
using HtmlAgilityPack; if (response.IsSuccessful) { // 解析HTML文档 var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(response.Content); // 提取纯文本 string plainText = htmlDoc.DocumentNode.InnerText; txtnote.Text = plainText; }
备选:正则表达式(简单但可能处理不彻底)
using System.Text.RegularExpressions; if (response.IsSuccessful) { // 移除所有HTML标签 string plainText = Regex.Replace(response.Content, "<.*?>", string.Empty); txtnote.Text = plainText; }
方案2:转为带格式的RTF(保留Bionic加粗效果)
你已经安装了TheArtOfDev.HtmlRenderer.WinForms,这个库可以直接将HTML渲染到RichTextBox或转为RTF,步骤如下:
- 确保代码引用命名空间:
using TheArtOfDev.HtmlRenderer.WinForms;
- 修改成功响应后的代码(二选一):
- 直接渲染到RichTextBox(最简单):
if (response.IsSuccessful) { HtmlRender.RenderTo(txtnote, response.Content); }
- 先转为RTF再赋值(适合需要保存RTF内容的场景):
if (response.IsSuccessful) { string rtfContent = HtmlRender.ConvertHtmlToRtf(response.Content); txtnote.Rtf = rtfContent; }
额外优化:修复请求参数
请求中的content参数需要做URL编码,避免特殊字符(如空格、&等)导致请求失败,同时移除多余的点:
// 替换原有的content赋值代码 string content = $"content={Uri.EscapeDataString(txtnote.Text)}&response_type=html&request_type=html&fixation=1&saccade=10";
内容的提问来源于stack exchange,提问作者rhyliieee
相关产品推荐
相关产品推荐

