都是ß惹的祸

收到一个客户报来的bug,说自己在创建某个component时,一旦命名中包含了ß(例如UEMENß),该创建功能会导致失败,删除掉ß后该功能正常运行。不少资深的测试和开发留言说—— ß是一个非常tricky的字符,很多第三方库对其支持都不好,其他产品也有类似问题吗,在release notes务必加上一句告知用户。

 

ß当真如此神秘?怎么就引得无数英雄尽折腰呢?为何那么多第三方库对其支持都不好呢?一起看看这段代码片段吧。

Stringb = "ß";
Localeloc = Locale.forLanguageTag("en-US");
System.out.println(b.toLowerCase(loc));
System.out.println(b.toUpperCase(loc));

打印结果如下:

ß
SS 

发现了什么吗?不会是眼花了吧,更换locale为tr-TR再试,结果没有任何变化。原来根源在这里,而本例中,同样因为调用了toUpperCase()导致ß变成了SS,而随后的检验过程自然找不到期望的ß,操作失败也随着而来。

int lastCommaIndex =distinguishedName.toUpperCase().indexOf(this.distinguishedName.toUpperCase()) -1;

戏法这东西,看上去高大上,而一旦捅破了感觉也就不过如此,再蹊跷的Bug也同理可证。背后的玄机已然曝光,以后做国际化开发时需要调用toUpperCase,大家还得小心为妙哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值