.NET的String是什么?Normalize是做什么的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

关于String.NormalizeMSDN文章简单地说:

返回一个新的字符串,其二进制表示采用特定的Unicode规范化形式。

有时会提到“Unicode规范化表单C”。

我只是想知道,这是什么意思?这个功能在现实生活中如何有用?

提问于
用户回答回答于

它确保可以比较unicode字符串是否相等(即使它们使用不同的unicode编码)。

来自Unicode标准附件#15

本质上,Unicode标准化算法将所有组合标记按指定顺序放置,并使用分解和合成规则将每个字符串转换为Unicode标准化形式之一。然后,转换的字符串的二进制比较将确定等价性。

用户回答回答于

形式C和形式D之间的一个区别是如何表示带有重音符号的字母:形式C使用一个带有重音符号的单个字母代码点,而形式D将其分隔为字母和重音。

副作用是,这使得可以轻松创建“删除口音”方法。

    public static string RemoveAccents(string input)
    {
        return new string(
            input
            .Normalize(System.Text.NormalizationForm.FormD)
            .ToCharArray()
            .Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
            .ToArray());
        // the normalization to FormD splits accented letters in accents+letters
        // the rest removes those accents (and other non-spacing characters)
    }

扫码关注云+社区