1

我已将印地语字体转换为 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\u0922\u093C \u092E\u093E\u0930\u094D \u0917 \u092A\u0930

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

4

4 回答 4

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

但是,对应的 HTML 到 श्रीगंगानगर। IS::::

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

对应的javascript是:

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

或者:

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

为什么不直接使用它们?

于 2012-08-27T10:20:42.703 回答
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")));
于 2012-08-27T10:39:56.650 回答
0
StringBuilder sb = new StringBuilder();
foreach(char c in hindi)
{
    sb.Append(@"\u").Append(((int)c).ToString("X4"));
}
return sb.ToString()
于 2012-08-27T10:25:13.543 回答
0

你可以

  • 使用正则表达式捕获每个 Unicode 字符&#([0-9]+);
  • 将捕获的部分转换为整数
  • 取字符串中整数的十六进制表示
  • \u在开头添加并0从左开始填充字符串以使其成为 4 个字符的字符串
于 2012-08-27T10:13:57.937 回答