表意文字space编码
Ideographic space encoding
我想在我们的编码中排除表意文字 space,但它不起作用。
string a = "A B";
var encoder = HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin, new UnicodeRange(3000, 1) });
Console.WriteLine(encoder.Encode(a));
输出是
A B
我只希望显示为 space。原因是我在另一个应用程序上发送它,他们希望它按原样接收。
A B
首先,IDEOGRAPHIC SPACE 的代码点是 3000,但它在 hex 中,所以你应该写成:
new UnicodeRange(0x3000, 1)
但是,这不能解决问题。
如果您查看 Create
的 documentation 的 "Remarks",您会看到:
Some characters in allowedRanges
might still be encoded; that is, this parameter indicates what ranges the encoder is allowed to not encode, not what characters it must not encode.
这很糟糕,不是吗?
如果我们看一下 reference source,我们会看到有一条评论专门说 禁止 某些类别中的所有字符(此构造函数由调用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 space 之外的所有字符都是禁止的。由于这是在源代码中编写的,并且在 _allowedCharacters = settings.GetAllowedCharacters();
行之后,无论您如何更改设置都无法更改行为。
所以总而言之,您不能使用 HtmlEncoder
来执行此操作。你必须使用其他东西。
旧的 WebUtility.HtmlEncode
似乎 不 编码表意文字 space,但它也不编码其他 spaces...也许这对你有用?
我想在我们的编码中排除表意文字 space,但它不起作用。
string a = "A B";
var encoder = HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin, new UnicodeRange(3000, 1) });
Console.WriteLine(encoder.Encode(a));
输出是
A B
我只希望显示为 space。原因是我在另一个应用程序上发送它,他们希望它按原样接收。
A B
首先,IDEOGRAPHIC SPACE 的代码点是 3000,但它在 hex 中,所以你应该写成:
new UnicodeRange(0x3000, 1)
但是,这不能解决问题。
如果您查看 Create
的 documentation 的 "Remarks",您会看到:
Some characters in
allowedRanges
might still be encoded; that is, this parameter indicates what ranges the encoder is allowed to not encode, not what characters it must not encode.
这很糟糕,不是吗?
如果我们看一下 reference source,我们会看到有一条评论专门说 禁止 某些类别中的所有字符(此构造函数由调用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 space 之外的所有字符都是禁止的。由于这是在源代码中编写的,并且在 _allowedCharacters = settings.GetAllowedCharacters();
行之后,无论您如何更改设置都无法更改行为。
所以总而言之,您不能使用 HtmlEncoder
来执行此操作。你必须使用其他东西。
旧的 WebUtility.HtmlEncode
似乎 不 编码表意文字 space,但它也不编码其他 spaces...也许这对你有用?