去除波兰语中的变音符号

emp*_*mpi 9 .net c# unicode diacritics polish

我试图用波兰语中的pangram删除变音字符.我使用Michael Kaplan的博客http://www.siao2.com/2007/05/14/2629747.aspx中的代码,但没有成功.

考虑一下pangram:"Pchnąćwtęłódźjeżalubośmskrzyńfig.".一切正常,但对于字母"ł",我仍然得到"ł".我想问题是"ł"表示为单个unicode字符,并且没有跟随NonSpacingMark.

你知道我怎么能解决它(不依赖于某些词典中的自定义映射 - 我正在寻找某种unicode转换)?

小智 5

前段时间我遇到过这个解决方案,看起来效果很好:

    public static string RemoveDiacritics(this string s)
    {
        string asciiEquivalents = Encoding.ASCII.GetString(
                     Encoding.GetEncoding("Cyrillic").GetBytes(s)
                 );

        return asciiEquivalents;
    }
Run Code Online (Sandbox Code Playgroud)


Eri*_* J. 3

文章中采取的做法是去掉Mark、Nonspacing字符。由于正如您正确指出的那样,“\xc5\x82”不是由两个字符组成(其中之一是 Mark,Nonspacing),因此您看到的行为是预期的。

\n\n

我不认为 Unicode 的结构允许您完成完全自动化的重新映射(您引用的文章的作者得出了相同的结论)。

\n\n

如果您只对波兰语字符感兴趣,至少映射很小且定义明确(例如参见http://www.biega.com/special-char.html的底部)。对于一般情况,我认为对于不是由标准字符加标记、非空格字符组成的字符不存在自动解决方案。

\n