c# - 在 C# 中解码西里尔文 HTML 实体

标签 c# html cyrillic

我使用 HtmlAgilityPack 从网站获取了一些字符串,其中包含西里尔字母的 HTML 实体

示例:

"Корпус"

保存到文件时,有没有办法将其解码为C#中的符号?我尝试使用 System.WebHttpUtility.HtmlDecodeWebUtility.HtmlDecode,但它没有帮助

我的尝试:

using System;
using System.Web;

namespace esp
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            body = "Корпус";

            //output will be "Корпус"
            Console.WriteLine(HttpUtility.HtmlDecode(body)); 
        }
    }
}

最佳答案

只是一个猜测。据我所知,我们有以下格式:

  &
   Letter(s) - transliterated letter 
   cy        - stands for Cyrillic 
  ; 

借助正则表达式,我们可以匹配所有字母,并将它们连接字符串例如

  using System.Text.RegularExpressions;

  ...

  string body = "Корпус";

  var transliteratedText = Regex.Replace(
         body, 
       @"&(?<letter>[A-Za-z]+)cy;",
         m => m.Groups["letter"].Value);

  Console.Write(transliteratedText);

我们将会有

Korpus

这听起来很合理,因为它是 transliterated俄语单词Корпус(CorpusBodyBulkCarcass)。有几个音译标准(我尝试过国会图书馆方案,这只是最流行的方案之一);为了检测正确的标准(或创建我们自己的标准),我们需要更多数据。

编辑 例如,如果我们有一个方案,例如,

private static Dictionary<string, string> translit = 
  new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase) {
  {"a", "а"},
  {"b", "б"},
  {"v", "в"},
  {"g", "г"},
  {"d", "д"},
  {"ie", "е"},
  //{"", "ё"}, //TODO: define the letter transliteration
  {"zh", "ж"},
  {"z", "з"},
  {"i", "и"},
  {"j", "й"},
  {"k", "к"},
  {"l", "л"},
  {"m", "м"},
  {"n", "н"},
  {"o", "о"},
  {"p", "п"},
  {"r", "р"},
  {"s", "с"},
  {"t", "т"},
  {"u", "у"},
  {"f", "ф"},
  {"h", "х"},
  {"ts", "ц"},
  {"ch", "ч"},
  {"sh", "ш"},
  {"shch", "щ"},
  //{"", "ъ"}, //TODO: define the letter transliteration
  {"y", "ы"},
  //{"", "ь"}, //TODO: define the letter transliteration
  //{"", "э"}, //TODO: define the letter transliteration
  //{"", "ю"}, //TODO: define the letter transliteration
  {"ya", "я"},
};

我们可以音译每个字母:

private static string MyDecoding(string value) {
  return Regex
    .Replace(value, @"&(?<letter>[A-Za-z]+)cy;", m => {
      string v = m.Groups["letter"].Value;

      return char.IsUpper(v[0])
        ? CultureInfo.InvariantCulture.TextInfo.ToTitleCase(translit[v])
        : translit[v];
      }
    );
}
...

Console.Write(MyDecoding("&Kcy;&ocy;&rcy;&pcy;&ucy;&scy;"));

结果:

Корпус

关于c# - 在 C# 中解码西里尔文 HTML 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60335442/

相关文章:

c# - 启用浏览器外的 Silverlight 会中断浏览器内的应用程序

c# - 对于具有 "in"的查询, "Where"关键字中的最大元素数是多少

css - 图片在 DIV 中的位置不正确(似乎是 Firefox 独有的)

php - 俄语字符编码问题

如果数据库列中的值达到零值,则 C# 进行条件处理

c# - OleDataAdapter Fill 方法将空行返回到数据表

html - CSS 调整图像背景而不是内容的亮度

html - 如何使用 HTML 和 CSS 将垂直图像显示为水平方式?

php - PHP HTML 中的俄语

mysql - SQLJocky : Incorrect encoding of received text