我正在尝试转换一些加拿大法语中的字符串,基本上,我希望能够在保留字母的同时去除字母中的法语重音符号。(例如,转换é
为e
,crème brûlée
则将变为creme brulee
)
实现此目标的最佳方法是什么?
我没有使用这种方法,但是迈克尔·卡普兰(Michael Kaplan)在他的博客文章(标题令人迷惑)中描述了这样做的方法,该文章讨论剥离变音符号:剥离是一项有趣的工作(又名“无意义,又称全锰字符”是非间隔的,但有些间隔比其他间隔的间隔大)
static string RemoveDiacritics(string text)
{
var normalizedString = text.Normalize(NormalizationForm.FormD);
var stringBuilder = new StringBuilder();
foreach (var c in normalizedString)
{
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}
请注意,这是他之前的文章的后续内容:剥离变音符号...。
该方法使用String.Normalize将输入字符串拆分为组成的字形(基本上将变位符中的“基本”字符分隔开),然后扫描结果并仅保留基本字符。只是有点复杂,但实际上您正在寻找一个复杂的问题。
当然,如果您将自己限制为法语,则可以使用@David Dibben建议的如何在C ++ std :: string中消除重音和波浪号的简单基于表的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句