意象空间编码

问题描述 投票:0回答:1

我想在我们的编码上排除表意空间,但它不工作。

string a = "A B";
var encoder = HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin, new UnicodeRange(3000, 1) });

Console.WriteLine(encoder.Encode(a));

输出是

A B

我希望只显示为一个空格。原因是我在另一个应用程序上发送它,他们希望它能按原样接收。

A B
c# encode html-encode
1个回答
3
投票

首先,IDEOGRAPHIC SPACE的码点是3000,但这是在 六角所以你应该写。

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 似乎 编码表意空间,但也不能编码其他空间...... 也许这对你有用?

© www.soinside.com 2019 - 2024. All rights reserved.