首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET的String.Normalize是做什么的?

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

Stack Overflow用户
提问于 2010-07-20 16:17:59
回答 4查看 31.5K关注 0票数 80

MSDN article on String.Normalize的声明很简单:

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

有时指的是"Unicode规范化形式C“。

我只是在想,这是什么意思?这个函数在现实生活中有什么用呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-20 16:22:35

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

来自Unicode标准Annex #15

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

票数 53
EN

Stack Overflow用户

发布于 2010-07-20 16:25:31

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

例如,"à“可以是码点224 (”带有重音的拉丁文小写字母A"),或者码点97 (“拉丁文小写字母A”),后跟码点786 (“组合重音”)。逐个字符的比较会发现它们是不同的。标准化使比较成功。

一个副作用是,这使得创建一个“移除重音”方法成为可能。

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 letters+accents
    // the rest removes those accents (and other non-spacing characters)
    // and creates a new string from the remaining chars
}
票数 78
EN

Stack Overflow用户

发布于 2010-07-20 16:33:15

在Unicode中,(合成的)字符可以具有唯一的代码点,也可以具有由基本字符及其重音符号组成的代码点序列。

Wikipedia列举了越南语重音(U+1EBF)及其分解序列U+0065 (e) U+0302 (扬音重音) U+0301 (急性重音)的例子。

string.Normalize()在4种范式之间进行转换,字符串可以用Unicode编码。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3288114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档