You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.8与6.0中"ß".Equals("SS", StringComparison.CurrentCultureIgnoreCase)结果为何不同?

.NET 4.8与.NET 6.0中德语字符ß与SS的比较差异

以下代码在不同.NET版本中运行结果存在差异:

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-de");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-de");
var eq = "ß".Equals("SS", StringComparison.CurrentCultureIgnoreCase); 
// .NET 4.8中返回True 
// .NET 6.0中返回False

差异原因

.NET Framework 4.8采用旧版Unicode排序规则,在德语文化(de-de)的大小写不敏感比较逻辑中,会将小写字符ß等价于SS。而.NET 5及后续版本(包括.NET 6)默认使用了更新的Unicode规范,其中ß的标准大写形式为ẞ(大写尖锐S),因此ß与SS不再被判定为相等。

恢复旧行为的方法

如果需要在.NET 6中保持和.NET 4.8一致的比较逻辑,可以指定使用旧版本的ICU排序规则:

var culture = new CultureInfo("de-de");
// 指定使用ICU 60版本排序规则,匹配旧版.NET Framework行为
culture.CompareInfo = CompareInfo.GetCompareInfo("de-de", CompareOptions.None, VersionSortVersion.IcuVersion(60));
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
var eq = "ß".Equals("SS", StringComparison.CurrentCultureIgnoreCase); // 此时返回True

内容的提问来源于stack exchange,提问作者Voo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:19:53