这个问题已经有一个答案在这里:

我已经找到一个答案如何删除变音符号字计算器,但能否请你告诉我如果它是可以改变音符号字无变音符号的?

哦..我想想。网(或如果没有其他可能的)

有帮助吗?

解决方案

从复制 我自己回答另一个问题:

而不是创建你自己的表格,您可以将文本转换到正常化表格D里的人物都表示为基础字加上的变音符号(例如,"a"将取代"一个"随后通过结合急性口音).然后你可以带的一切这不是一个ASCII的信。

表仍然存在,但是现在那些从Unicode的标准。

你也可以尝试NFKD而不是,比,赶上甚至更多的情况。

参考文献:

其他提示

因为从来没有人打扰到后代码要做到这一点,那就是:

    // \p{Mn} or \p{Non_Spacing_Mark}: 
    //   a character intended to be combined with another 
    //   character without taking up extra space 
    //   (e.g. accents, umlauts, etc.). 
    private readonly static Regex nonSpacingMarkRegex = 
        new Regex(@"\p{Mn}", RegexOptions.Compiled);

    public static string RemoveDiacritics(string text)
    {
        if (text == null)
            return string.Empty;

        var normalizedText = 
            text.Normalize(NormalizationForm.FormD);

        return nonSpacingMarkRegex.Replace(normalizedText, string.Empty);
    }

注:一个很大的原因需要这样做是当你被整合到一个第3方的系统,该系统不仅ascii,但你的数据是在统一编码。这是常见的。你的选择是基本上:删除重音符号,或试图删除口音重音符,以尝试保留尽可能多的原输入。显然,这不是一个完美的解决方案,但它是80%比,简单地删除任何性格上述ascii127.

这可能也是有价值的退一步,并考虑 为什么 你想做到这一点。如果你试图删除的字符的差异你认为微不足道的,你应该看看Unicode的排序规则的算法。这是标准的方式忽视的差异,如情况下或音的时候比较串的搜索或排序。

如果你的计划显示修改后的文本,请考虑你的观众。什么你可以安全过滤器是语言环境敏感。在我们的英语,"屋"="屋",并"恢复"="的简历",但在土耳其,一个较低的情况下,我是ı(无点),并且在法国的科装置引côté意味着侧,科装置海岸。因此,排序规则的语言确定什么样的差异是显着的。

如果删除变音符号是正确的解决方案,它是最安全生产自己的表,其中明确添加字你想转换。

一般性的,自动化的方法可能是设计使用Unicode分解。有了这个,你可以分解的一个角色与符号为"合并"的字符的(变音符号标志)和基字与它们合并。过滤出来的任何东西,是一个结合的性格,你应该有"无变音符号"。

缺乏歧视的自动方法,但是,可能有一些意想不到的效果。我会推荐了很多测试在一个具有代表性的机构的文本。

对于一个简单的例子:

删除变音符号从一串:

string newString = myDiacriticsString.Normalize(NormalizationForm.FormD);

我的网站输入数据,从外部来源,它有许多奇怪的人物。我写了以下C#功能来代替口音符和条除非我们键人物使用Regex:

    using System.Text;
    using System.Text.RegularExpressions;

    internal static string SanitizeString(string source)
    {
        return Regex.Replace(source.Normalize(NormalizationForm.FormD), @"[^A-Za-z 0-9 \.,\?'""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*", string.Empty).Trim();    
    }

希望这有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top