HtmlDecode html-кодированного пространства не является пространством

До сих пор я думал, что HttpUtility.HtmlDecode(" ") - это пространство. Но ниже код всегда возвращает false.

string text = " ";

text = HttpUtility.HtmlDecode(text);

string space = " ";

if (String.Compare(space, text) == 0)
  return true;
else
  return false;

То же самое, когда я пытаюсь использовать Server.HtmlDecode()

Почему это так?

Любая помощь будет высоко оценена

Спасибо, N

Ответ 1

Объект HTML   не представляет пробел, он представляет собой неразрывное пространство.

Неразрывное пространство имеет код символа 160:

string nbspace = "\u00A0";

Кроме того, как заметил Марк Гравелл, вы дважды закодировали код, поэтому вам нужно будет его дважды декодировать, чтобы получить символ:

string text = " ";
text = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(text));

Ответ 2

HTML   не означает любой вид пространства. Это означает, в буквальном смысле, текст   - например, если вы писали HTML, который говорил о HTML, вам может потребоваться включить текст  , который вы бы сделали, написав HTML  .

Если у вас есть:

string text = " ";

то это будет декодироваться в не разбивающемся пространстве.

Ответ 3

Я очищаю html следующим образом:

  var text = WebUtility.HtmlDecode(html)
      .Replace("\u00A0", " ") // Replace non breaking space with space.
      .Replace("  ", " ") // Shrink multiple spaces into one space.
      .Trim();