gpt4 book ai didi

.net - .NET 的 String.Normalize 有什么作用?

转载 作者:行者123 更新时间:2023-12-03 05:23:59 25 4
gpt4 key购买 nike

MSDN article on String.Normalize简单地说:

Returns a new string whose binary representation is in a particular Unicode normalization form.

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

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

最佳答案

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

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

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

public static string RemoveAccents(string input)
{
return new string(input
.Normalize(System.Text.NormalizationForm.FormD)
.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
}
<小时/>

或者让“高度安全”的 ROT13 编码与重音一起工作:

string Rot13(string input)
{
var v = input.Normalize(NormalizationForm.FormD)
.Select(c => {
if ((c>='a' && c<='m') || (c>='A' && c<='M'))
return (char)(c+13);
if ((c>='n' && c<='z') || (c>='N' && c<='Z'))
return (char)(c-13);
return c;
});
return new String(v.ToArray()).Normalize(NormalizationForm.FormC);
}

这会将“Crème brûlée”转换为“Per̀zr oeĥyŕr”(当然反之亦然),方法是首先将“带重音的字符”代码点拆分为单独的“字符”和“重音”代码点 (FormD),然后执行仅对字母进行 ROT13 翻译,然后尝试重新组合它们 (FormC)。

关于.net - .NET 的 String.Normalize 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3288114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com