您的位置:首页 > 其它

墙角下的toLowerCase()

2016-12-26 17:52 429 查看
Turkey对国际化开发和测试人员应该都不算陌生,在G11n的世界中,他一直都属于那种需要被“重点照顾”的同学。但究竟怎么个特殊法呢?我先来讲述一个亲身经历的往事。

 

故事就发生在不久前,首先测试人员安装AUT在TR win server上,紧接着在browser中键入需要访问的URL,点击Access试图访问AUT。然而奇迹就在此刻不期而遇了……测试人员在等待了很长时间后,页面上除了一个不停loading的转盘外,什么都没有发生,整个登陆过程被hang住!而该情况在其他OS上并不复现。

 

问题何在?TR缘何要被重点照顾?头号嫌犯的影像其实已在脑中浮现了出来,于是默默地在IDE中搜索toLowerCase& toUpperCase……

 

果不其然,惯犯已落网,示例代码如下。

public enum OS {
WIN32, WIN64,WINMOBILE, LINUX64, LINUX32, ANDROID, IOS, CHROMEOS, MAC, UNKNOWN;

public StringtoString() {
returnname().toLowerCase();
}
}
到这里,我们已经看出该问题的根源就在于在toLowerCase函数在TR locale下对字符“i”的处理异于其他。而好巧不巧的是,几个主流操作系统又都不约而同的包含了字母i,Windows,Linux,IOS,Android。于是乎,问题不可避免的发生了。

 

究竟TR对于i的处理有何诡异?看看下面这段代码的输入你应该就了然啦。

String uos = "WIN64";
String los = "linux64";
Locale loc = Locale.forLanguageTag("tr-TR");

System.out.println(uos.toLowerCase(loc));
System.out.println(uos.toLowerCase(Locale.ROOT));
System.out.println(los.toUpperCase(loc));
System.out.println(los.toUpperCase(Locale.ROOT));
wın64
win64
LİNUX64
LINUX64
最终在toLowerCase中明示Locale,修改代码为return name().toLowerCase(Locale.ROOT); 问题解决。回顾问题本身,其实是一处很小的代码修改,但却险些造成了release delay,看来要实现一个国际化的软件产品,尤其需要注意这些犄角旮旯中的暗器哦,正如墙角下的toLowerCase。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  toLowerCase Turkey