我遇到了一些问题,需要将字符串"SΨZΣ"转换为小写。
在C#中使用.ToLower()和.ToLowerInvariant()均返回结果为"sψzσ"。 而javascript则返回"sψzς"。
经过一些研究,我认为已经理解了,字符'Σ'只有在不在单词结尾时才应该被转换为 'σ',否则应该变成 'ς' - 因此javascript版本是正确的。 事实上,当我使用C#字符串调用外部API时出现错误,而js字符串则可以正常工作。
您有什么想法,如何使C#正确地将字符串转换为小写?
我遇到了一些问题,需要将字符串"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;
}
我不熟悉希腊字母表,但我建议在这里实现您自己的小写方法,以下是一个示例
char ToLowerCaseGreek(char letter) =>
return (char)(((int)letter) - ((int)'Α') - ((int)'α'));
首先,我们计算大写希腊字母表(大写阿尔法)与小写希腊字母表(小写阿尔法)之间的偏移量,然后从我们的大写希腊字母表字符中减去该偏移量,以获取与其匹配的小写字符。
=>
,这意味着return
,如果在其后使用return
,编译器会报错。第二个问题是它实际上并没有按照预期工作,当我输入"SΨZΣ"时,它给出了"螺ﱦ落ﱡ"的结果。 - The Headmaster