墙角下的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。
故事就发生在不久前,首先测试人员安装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。
相关文章推荐
- JS:1.8,字符串(string)对象(length,indexOf(),lastIndexOf(),replace(),match(),toUpperCase(),toLowerCase())
- JS中string方法中常用方法之十:String.prototype.toLocaleLowerCase()
- JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
- toLowerCase和toLocaleLowerCase()的区别
- 使用navigator.userAgent.toLowerCase()判断登陆端是pc还是手机
- JavaScript toUpperCase() 方法和 toLowerCase() 方法
- JS:1.8字符串(string)对象(length,indexOf(),lastIndexOf(),replace(),match(),toUpperCase(),toLowerCase())
- [Shell]convert upper case to lower case
- 关于Uncaught TypeError: Cannot read property 'toLowerCase' of undefined的问题
- Convert a String In C++ To Upper or Lower Case
- navigator.userAgent.toLowerCase()
- Uncaught TypeError: Object #<HTMLCollection> has no method 'toLowerCase'问题
- Uncaught TypeError: b.nodeName.toLowerCase is not a function
- jquery TypeError: 'undefined' is not a function (evaluating 'elem.nodeName.toLowerCase()') [jquery.js:1904]错误原因
- java用String类的toUpperCase()和toLowerCase()方法转字符串的大小写
- easyui使用combobox报错Uncaught TypeError: row[opts.textField].toLowerCase is not a function
- JS toLowerCase()方法 toUpperCase()方法
- 【记录】JS toUpperCase toLowerCase 大写字母/小写字母转换
- string.ToLowerCase()用法
- java.lang.String 下面的toUpperCase()和toLowerCase()方法