gpt4 book ai didi

c# - 为什么删除重音符号/变音符号时 Đ 没有变平为 D

转载 作者:可可西里 更新时间:2023-11-01 03:09:59 25 4
gpt4 key购买 nike

我正在使用这种方法从我的字符串中删除重音符号:

static string RemoveAccents(string input)
{
string normalized = input.Normalize(NormalizationForm.FormKD);
StringBuilder builder = new StringBuilder();
foreach (char c in normalized)
{
if (char.GetUnicodeCategory(c) !=
UnicodeCategory.NonSpacingMark)
{
builder.Append(c);
}
}
return builder.ToString();
}

但此方法将 đ 保留为 đ 而不会将其更改为 d,即使 d 是其基本字符。你可以用这个输入字符串试试

在字母 đ 中有什么特别之处?

最佳答案

为什么它不起作用的答案是“d 是它的基本字符”这一说法是错误的。 U+0111(带笔划的拉丁文小写字母 D)具有 Unicode 类别“字母,小写”并且没有分解映射(即,它不会分解为后跟组合标记的“d”)。

"đ".Normalize(NormalizationForm.FormD) 只是返回"đ",它不会被循环剥离,因为它不是非间距标记.

对于“ø”和其他 Unicode 未提供分解映射的字母,也会存在类似的问题。 (如果你试图找到“最好的”ASCII 字符来表示一个 Unicode 字母,这种方法对西里尔字母、希腊字母、中文字母或其他非拉丁字母根本不起作用;如果例如,您想将“ß”音译为“ss”。使用像 UnidecodeSharp 这样的库可能会有所帮助。)

关于c# - 为什么删除重音符号/变音符号时 Đ 没有变平为 D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2362810/

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