如何在C#中将HTML转换为Javascript转义

时间:2012-08-27 10:04:25

标签: c# html unicode

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

印地文:

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

对应的HTML:

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

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

  

\ u0934 \ u090D \ u0930 \ u0930 \ u0902 \ u0930 \ u093E \ u0928 \ u0917 \ u0930 \ u0964 \ u0939 \ u0928 \ u0911 \ u092E \ u093E \ u0928 \ u0917 \ u0922 \ u093C \ u092E \ u093E \ u0930 \ u094D \ u0917 \ u092A \ u0930

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

4 个答案:

答案 0 :(得分:1)

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在内部使用UTF-16与C#相同,所以上述内容在BMP之外也能正常工作。

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

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

相应的javascript是:

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

或者:

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

为什么不直接使用它们?

答案 1 :(得分:0)

你可以

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

答案 2 :(得分:0)

StringBuilder sb = new StringBuilder();
foreach(char c in hindi)
{
    sb.Append(@"\u").Append(((int)c).ToString("X4"));
}
return sb.ToString()

答案 3 :(得分:0)

我看到你直接从原始文本中得到了多个答案,这里有一种方法可以根据你的要求从你的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")));