【问题标题】:Accented letter and quotation marks in html innertexthtml 内部文本中的重音字母和引号
【发布时间】:2019-11-03 10:43:13
【问题描述】:

我从一个 html 页面获取文本,但是当我在屏幕上打印时,像这样的重音字母和符号:> 或这个:«»,用问号表示。

示例代码:

static void Main(string[] args)
{
    var html = @"<body>
                    <p>This is the text with «quotation marks» and accented word wè</p>
                 </body>";

    var htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(html);

    var htmlNodes = htmlDoc.DocumentNode.SelectSingleNode("//body");

    Console.WriteLine(Regex.Replace(WebUtility.HtmlDecode(htmlNodes.InnerText), @"\r\n?|\n|[ ]{2,}", ""));
    Console.ReadLine();
        
}

我已经使用 WebUtility.HtmlDecode(string) 来解码字符串并使用 HtmlAgilityPack 来管理 Html

在我上面写的代码示例中,返回的字符串对于真实字符是正确的:

-- 这是带有«引号»和重音单词 wè 的文本

但在我的例子中,在 html 页面中获取代码(以与上图相同的方式)重音字母和符号(如引号)用问号打印它们,如下所示:

-- 这是带 ? 引号的文本?和重音词 w?

当真实的字母带有问号时,我怎样才能保留它们?

提前致谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您能提供minimal reproducible example,这将非常有帮助 - 目前我们不知道您是如何获取文本的,或者您是如何在屏幕上打印的。
  • 我把帖子更新的更清楚了
  • 您正在向控制台写入数据——您的控制台甚至支持这些字符吗?如果您只写Console.WriteLine(html);that 会显示什么?在运行代码之前,您可能希望在控制台中使用 chcp 65001
  • 我可以举一个小例子来说明如何在控制台中使用 chcp 65001 吗?
  • 在控制台中,键入“chcp 65001”(不带引号)并按回车键。就这么简单。

标签: c# html string text


【解决方案1】:

有关特殊字符的代码列表,请参阅 https://www.whatsmyip.org/html-characters/。例如,è 应编码为&amp;#232;

【讨论】:

  • 问题是在字符串中它没有显示“è”而只是一个问号
  • 我已经尝试过更换,但这并不能解决问题
  • HTML 显然是正确的。问题在于打印到控制台 - HTML 编码无济于事
  • @HansKesting 显然。在我回答的时候,原始问题的上下文较少,也没有示例代码,所以编码是我最好的猜测。
猜你喜欢
  • 2014-04-14
  • 2012-10-25
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多