C#将包含多种字符类型的字符串编码为HTML

C#将包含多种字符类型的字符串编码为HTML,c#,html,winforms,encode,C#,Html,Winforms,Encode,我怀疑,我甚至不知道这是什么样的怀疑。我来解释一下 我需要将C#Windows窗体中可能包含任何类型字符的字符串转换为HTML格式。我需要这个来使用我的程序中的现有工具,所以它必须完全像这样 问题在于HtmlEncode函数不能按预期工作。我发现了一个网站,完全符合我的需要。该网站是: 在本网站中,当我发布字符串时: "® € ì Ù Ω µ drokluží zlůd paněž Ř ř common text" 并将其转换为html,我得到: "® &#836

我怀疑,我甚至不知道这是什么样的怀疑。我来解释一下

我需要将C#Windows窗体中可能包含任何类型字符的字符串转换为HTML格式。我需要这个来使用我的程序中的现有工具,所以它必须完全像这样

问题在于
HtmlEncode
函数不能按预期工作。我发现了一个网站,完全符合我的需要。该网站是:

在本网站中,当我发布字符串时:

"® € ì Ù Ω µ drokluží zlůd paněž  Ř  ř common text"
并将其转换为html,我得到:

"® € ì Ù Ω µ drokluží zlůd paněž  Ř  ř common text"
我需要在C中得到完全相同的结果。请注意,当我要求转换时,原始文本更改为:

"® **€ ì Ù Ω µ drokluží zlůd paněž  Ř  ř common text**"
因此,我认为,预转换是在最终转换之前完成的。我就是找不到

请注意,
HTMLEncode
产生

"® € ì Ù Ω µ drokluží zlůd paněž  Ř  ř common text"
它甚至不转换一些符号,比如
Ω
,或者外文
zlůd paněŘř**


我已经在这件事上浪费了大量的时间,所以任何形式的帮助都将不胜感激。我希望问题足够清楚。

如果您的输入是UTF格式的,您能不能不使用循环(伪代码)来解析文本

可能的改进


在我看来,最好使用实体字符串,因为它们对人类读者来说更清晰,并且不太可能被计算机误解。但是,上面的操作应该有效…

您正在查看以下代码:

public string HTMLEncodeSpecialChars(string text)
{
  System.Text.StringBuilder sb = new System.Text.StringBuilder();
  foreach (char c in text){
    if(c>127) // chars not in ASCII
      sb.Append(String.Format("&#{0};",(int)c));
    else
      sb.Append(c);
  }
  return sb.ToString();
}

@ASGM谢谢,它看起来确实好多了:)不客气,但真正的功劳应该归于@rivemey(我只是稍微修改了他们的编辑),但我似乎是最新的编辑,因为我批准了他们的更改。我会尝试一下,然后再回复给你。我相信这会奏效,但在我做的时候,有人用代码发布了它!无论如何,非常感谢。这段代码并不是输入字符的特殊情况,它需要输入字符。它确实可以工作,尽管输出代码与该网站的不完全相同。谢谢只有两个问题。1-从技术上讲,函数所做的是什么?基本上,我需要什么?(因为我只知道我需要那个最终结果,所以我不知道我在看什么)。2-你能提供相反的代码吗?@viper 1)它将ASCII中的任何字符(因此代码号大于127)转换为HTML编码的等效字符。正常的C#函数也会这样做,但它会对UTF-8中没有的字符进行解码。@viper 2)对于反向代码,您可以使用标准方法:只是一个想法:ISTR有一个系统字符类型模块,其中包括IsPrint(x):字符x可打印吗?这将是一个比Garath或我给出的更好的测试。
public string HTMLEncodeSpecialChars(string text)
{
  System.Text.StringBuilder sb = new System.Text.StringBuilder();
  foreach (char c in text){
    if(c>127) // chars not in ASCII
      sb.Append(String.Format("&#{0};",(int)c));
    else
      sb.Append(c);
  }
  return sb.ToString();
}