首页 > 解决方案 > 希腊字符串转小写

问题描述

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

在 C# 中,.ToLower() 和 .ToLowerInvariant() 都给了我“sψzσ”作为结果。而 javascript 返回“sψzς”。

经过一些研究,我认为已经理解字符'Σ'应该被翻译成'σ',只有当它不在单词的末尾时,在这种情况下它应该变成'ς' - 所以javascript版本是美好的。事实上,我在使用 C# 字符串调用外部 API 时遇到错误,而 js 字符串工作正常。

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

标签: javascriptc#stringcultureinfo

解决方案


不幸的是,在 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;
    }

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

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


推荐阅读