我在将字符串“SΨZΣ”转换为小写时遇到了一些麻烦。
在 C# 中,.ToLower() 和 .ToLowerInvariant() 都给我“sψzσ”作为结果。 而 javascript 返回“sψzς”。
经过一些研究,我认为只有当字符“Σ”不在单词的末尾时才应将其翻译为“σ”,在这种情况下,它应该变成“ς”——所以javascript 版本很好。 事实上,我在使用 C# 字符串调用外部 API 时遇到错误,而 js 字符串工作正常。
关于如何使 C# 正确降低字符串的任何想法?
最佳答案
不幸的是,在 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;
}
这会将您的字符串小写,然后查找后跟一个或多个空格或出现在字符串末尾的任何“σ”字符(字符串中的最后一个单词后面可能不会跟空格)和然后将其替换为“ς”,保留它找到的任何现有空白。
正则表达式可能最适合这些类型的场景。我猜您可能还想确保添加或删除希腊语变音符号,例如 Ρύθμιση --> ΡΥΘΜΙΣΗ 等词的音调。这是可以做到的,但它要复杂得多,并且需要更繁重的正则表达式来评估所有情况。
关于javascript - 希腊字符串转小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53684518/