Во-первых, код IDEOGRAPHI C SPACE - 3000, но он находится в hex , поэтому вы должны написать:
new UnicodeRange(0x3000, 1)
Однако это не исправит проблема.
Если вы посмотрите на «Замечания» документации для Create
, вы увидите:
Некоторые символы в allowedRanges
все еще может быть закодирован; то есть этот параметр указывает, какие диапазоны кодировщику разрешено не кодировать, а не какие символы он не должен кодировать.
Это отстой, не так ли?
Если мы имеем Если взглянуть на справочный источник , мы увидим, что есть комментарий, специально говорящий о запрещении всех символов в определенных категориях (этот конструктор вызывается Create
):
public DefaultHtmlEncoder(TextEncoderSettings settings)
{
if (settings == null)
{
throw new ArgumentNullException(nameof(settings));
}
_allowedCharacters = settings.GetAllowedCharacters();
// Forbid codepoints which aren't mapped to characters or which are otherwise always disallowed
// (includes categories Cc, Cs, Co, Cn, Zs [except U+0020 SPACE], Zl, Zp)
_allowedCharacters.ForbidUndefinedCharacters();
Мы видим, что все символы в Zs
, кроме пробела 0x20, запрещены. Поскольку это написано в исходном коде и после строки _allowedCharacters = settings.GetAllowedCharacters();
, вы не можете изменить поведение независимо от того, как вы меняете настройки.
Итак, в заключение, вы не можете использовать HtmlEncoder
сделать это. Вам придется использовать что-то еще.
Старый WebUtility.HtmlEncode
, кажется, не кодирует идеографический c пробел, но он также не кодирует другие пробелы .. . Может это тебе пригодится?