Windows文件名大小写不敏感判定算法及跨平台复刻方法咨询
Windows文件名大小写不敏感判定逻辑及非Windows复刻方案
核心判定规则
Windows的文件名大小写不敏感比较基于Unicode文化无关的全大小写折叠,搭配少量系统专属调整,核心规则如下:
- ASCII字符:A-Z直接转换为对应的a-z,无特殊处理。
- 非ASCII字符:遵循Unicode标准的全大小写折叠规则,将字符转换为小写等价形式(部分字符会映射为多字符序列,比如德语
ß会被转换为ss)。 - 无区域依赖:比较逻辑不随系统区域设置变化,所有语言环境下规则统一,不会因为区域差异(如土耳其语的
İ/ı)改变判定结果。
非Windows环境复刻步骤
要在非Windows代码中实现近似逻辑,按以下步骤操作:
- 统一编码:将待比较的文件名转换为Unicode字符串(例如把UTF-8编码转为UTF-32,方便逐字符处理)。
- 执行全大小写折叠:
- 参照Unicode官方定义的大小写折叠映射处理每个字符。
- 应用Windows专属调整:强制将
ß(U+00DF)替换为ss,将ẞ(U+1E9E)替换为SS——因为Windows中ß和SS会被判定为相同。
- 直接字符串匹配:将两个经过折叠处理后的字符串逐字符对比,完全一致则判定为同名文件。
重要说明
- 无法100%精准复刻:Windows内部存在部分边缘场景的特殊处理(如罕见Unicode字符映射、旧FAT文件系统遗留规则),但上述逻辑足以覆盖绝大多数常规使用场景。
- 禁用区域相关转换:不要依赖系统默认的
tolower类函数(其行为受区域设置影响),必须使用文化无关的Unicode折叠逻辑。
内容的提问来源于stack exchange,提问作者Timmmm
相关产品推荐
相关产品推荐

