【问题标题】:How to convert HTML to Javascript escapes in C#如何在 C# 中将 HTML 转换为 Javascript 转义
【发布时间】:2012-08-21 19:39:09
【问题描述】:

我已将印地语字体转换为 HTML 代码。现在我想要的是将此 HTML 代码转换为 unicode 转义...

印地语:

श्रीगंगानगर। हनुमानगढ़ मार्ग पर लालगढ़ जाटान छावनी के नजदीक शनिवार सुबह सड़क से पन्द्रह-...

对应的HTML:

श्रीगंगानगर। हनुमानगढ़ मार्ग पर लालगढ़ जाटान छावनी के नजदीक शनिवार सुबह सड़क से पन्द्रह-...

现在我想将此 HTML 代码转换为 unicode 转义,例如:

\u0936\u094D\u0930\u0940\u0917\u0902\u0917\u093E\u0928\u0917\u0930\u0964\u0939\u0928\u0941\u092E\u093E\u0928\u0917\u092E\u0917\u092E\u0917\u092E\u090 u0930\u094D\u0917\u092A\u0930

就像在this site 中一样。但我希望通过 C# 代码进行这种转换,而不是在 Javascript 中......

【问题讨论】:

  • 这是一个简单的十进制到十六进制转换和字符串操作。
  • 谢谢,我会搜索一下我不知道该怎么做,看看它是否对我有帮助......

标签: c# html unicode


【解决方案1】:

你可以

  • 使用正则表达式&#([0-9]+);捕获每个unicode字符
  • 将捕获的部分转换为整数
  • 取字符串中整数的十六进制表示
  • 在开头添加\u,从左到右填充0,使其成为4个字符的字符串

【讨论】:

  • 我直到现在才尝试,因为我找到了答案,但也会尝试,因为这个解释看起来不错......谢谢快速回复
【解决方案2】:
StringBuilder sb = new StringBuilder(hindiString.Length * 6);
foreach(char c in hindiString)
  sb.Append(@"\u").Append(((int)c).ToString("X4"));
return sb.ToString()

我假设您不需要担心 BMP 之外的任何事情。如果是这样,您想先将 UTF-16 高代理和低代理合并在一起。 编辑:最后一句,js在内部使用与C#相同的UTF-16,所以上面的在BMP之外也可以正常工作。

但是,对应的 HTML 到 श्रीगंगानगर। हनुमानगढ़हनुमानगढ़मार्गपरलालगढ़जाटानजाटानछावनीकेशनिवारशनिवारसुबहसड़कसेसेपन्द्रहसे:

<p>श्रीगंगानगर। हनुमानगढ़ मार्ग पर लालगढ़ जाटान छावनी के नजदीक शनिवार सुबह सड़क से पन्द्रह</p>

而对应的javascript是:

"श्रीगंगानगर। हनुमानगढ़ मार्ग पर लालगढ़ जाटान छावनी के नजदीक शनिवार सुबह सड़क से पन्द्रह"

或者:

'श्रीगंगानगर। हनुमानगढ़ मार्ग पर लालगढ़ जाटान छावनी के नजदीक शनिवार सुबह सड़क से पन्द्रह'

为什么不直接使用它们?

【讨论】:

  • NP。我刚刚添加了一个优化,如果字符串很大,它会产生影响,你仍然需要转义它,而不是像我建议的那样直接使用它。
  • 哦等等。你的注视点是&amp;#1234;格式吗?对不起,我看错了。然后先做 HtmlDecode。
  • 实际上我测试了它,但效果不佳,它给了我 unicode 转义,但这不是确切的可能术语,我在我的问题中提到我有 html 代码,但仍然感谢您的回复和gr8 答案......虽然我从@Joachim Isaksson 的答案中得到了我想要的东西
  • 是的,我上一条评论就是这么说的。
【解决方案3】:
StringBuilder sb = new StringBuilder();
foreach(char c in hindi)
{
    sb.Append(@"\u").Append(((int)c).ToString("X4"));
}
return sb.ToString()

【讨论】:

    【解决方案4】:

    我看到您直接从原始文本中得到了多个答案,这是一种按照您的要求从 HTML 转义中完成的方法;

    string input = "&#2358;&#2381;&#2352;&#2368;&#2327;&#2306;&#2327;..."
    
    var output = Regex.Replace(input, @"&#([0-9]*);", 
                   x => String.Format("\\u{0:X4}", int.Parse(x.Groups[1].Value)));
    

    或交替;

    var output = String.Join("", WebUtility.HtmlDecode(input)
                       .Select(x => "\\u" + ((int)x).ToString("X4")));
    

    【讨论】:

    • 您好,非常感谢,这个答案是最好的,这正是我想要的……非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多