关闭

测试服务器的编码方式对字符串长度判断的影响

发表于:2016-1-14 11:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:马威Max    来源:51Testing软件测试网采编

  在最近的一次测试中遇到一个bug,在本地开发环境中检测昵称长度时判断1~24个字符为规定长度(一个汉字等于两个字符),
  所以在本地中我输入十二个汉字是符合规定的,且保存成功。
  (本地情况)
  但是同样代码部署在测试环境中,输入同样的昵称长度,却判定为保存失败,根据chrome控制台错误码显示错误原因为“字符长度超出限制”
  那么问题来了,同样的代码为什么部署在两个环境产生不同的昵称长度断判?
  在开发环境中的昵称判断代码如下:
  
  先将输入的string类型的昵称做正则表达式的判断,在通过getBytes获取string的字节数(汉字为两个字节,其他常用字符为一个字节)进行判断,超过24即为超出
  长度。通过本地的debug发现输入十二个汉字的时候是符合字节数(bytes.length)的规定判断
  那么测试环境中出现问题的可能是编码方式很本地开发环境不同。
  通过调用System.getProperties()查出本地开发环境的默认编码方式GBK(GBK全称《汉字内码扩展规范》)
  而测试服务器上查询服务器的默认编码方式为en_US.UTF-8
  再通过自己写的java判断两种编码方式字节数的区别(本地的BGK和测试环境的UTF-8)
  控制台输出为
  36
  24
  可以得出一个汉字用GBK编码为2个字节,用UTF编码为3个字节(计算机基础。。。不够扎实。。。。)
  由此可以知道bug的来源即是默认编码方式的区别。而如何解决这个bug也顺利成章的将getBytes方式设定为“GBK”即可
  bug解决,希望大家看到这篇文章不用掉进同一个坑。。
《2023软件测试行业现状调查报告》独家发布~

精彩评论

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号