希腊字母字符串要小写

时间:2018-12-08 16:25:54

标签: javascript c# string cultureinfo

在将字符串“SΨZΣ”转换为小写时遇到了一些麻烦。

在C#中,.ToLower()和.ToLowerInvariant()都给我“sψzσ”的结果。 当javascript返回“sψzς”时。

经过一些研究,我认为已经理解,仅当字符'Σ'不在单词末尾时才应将其翻译为'σ',在这种情况下,应将其转换为'ς'-因此javascript版本还可以。 的确,在使用C#字符串调用外部API时,而在js字符串正常工作的时候,我遇到了错误。

关于如何使C#正确降低字符串的任何想法吗?

2 个答案:

答案 0 :(得分:1)

不幸的是,在C#中没有默认的方法可以执行此操作。起初,当我查看您的问题时,我猜测可能是可以解决这种文化问题的原因,例如:

string s = "SΨZΣ".ToLower(new CultureInfo("el-GR"));

,但是不幸的是,这不起作用。问题更加复杂,因此需要我们制定自己的解决方案:

    public string GreekToLower(string s)
    {
        string lowerString = s.ToLower();

        // Matches any 'σ' followed by whitespace or end of string
        string returnString = Regex.Replace(lowerString, "σ(\\s+|$)", "ς$1");
        return returnString;
    }

这将小写您的字符串,然后查找任何'σ'字符,其后跟一个或多个空格或出现在字符串的末尾(字符串中的最后一个单词可能不会跟有空格),并且然后将其替换为“ς”,并保留找到的所有现有空格。

正则表达式可能最适合这些类型的方案。我猜想您可能还想确保也添加或删除了希腊的变音符号,例如Ρύθμιση->ΡΥΘΜΙΣΗ之类的单词的音调。可以做到这一点,但是它的方式更加复杂,并且需要更繁重的正则表达式来评估所有情况。

答案 1 :(得分:0)

我对希腊字母不熟悉,但我建议您在此处实现自己的小写字母方法

char ToLowerCaseGreek(char letter) =>
return (char)(((int)letter) - ((int)'Α') - ((int)'α'));

首先,我们计算大写希腊字母的开头(大写字母alpha)到小写希腊字母的开头(小写字母alpha)之间的偏移量,然后从大写希腊字母char中减去该偏移量以获得与之匹配的小写字符。