注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

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

来自马威Max   2015-12-03 11:53:29|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在最近的一次测试中遇到一个bug,在本地开发环境中检测昵称长度时判断1~24个字符为规定长度(一个汉字等于两个字符),
所以在本地中我输入十二个汉字是符合规定的,且保存成功。
本地环境和测试服务器的编码方式对字符串长度判断的影响 - 网易杭州QA - 网易杭州 QA Team
 
(本地情况)

但是同样代码部署在测试环境中,输入同样的昵称长度,却判定为保存失败,根据chrome控制台错误码显示错误原因为“字符长度超出限制”

那么问题来了,同样的代码为什么部署在两个环境产生不同的昵称长度断判?
在开发环境中的昵称判断代码如下:
本地环境和测试服务器的编码方式对字符串长度判断的影响 - 网易杭州QA - 网易杭州 QA Team
 
先将输入的string类型的昵称做正则表达式的判断,在通过getBytes获取string的字节数(汉字为两个字节,其他常用字符为一个字节)进行判断,超过24即为超出
长度。通过本地的debug发现输入十二个汉字的时候是符合字节数(bytes.length)的规定判断
那么测试环境中出现问题的可能是编码方式很本地开发环境不同。
本地环境和测试服务器的编码方式对字符串长度判断的影响 - 网易杭州QA - 网易杭州 QA Team

通过调用System .getProperties()查出本地开发环境的默认编码方式GBK(GBK全称《汉字内码扩展规范》)
而测试服务器上查询服务器的默认编码方式为en_US.UTF-8
本地环境和测试服务器的编码方式对字符串长度判断的影响 - 网易杭州QA - 网易杭州 QA Team
再通过自己写的java判断两种编码方式字节数的区别(本地的BGK和测试环境的UTF-8)
本地环境和测试服务器的编码方式对字符串长度判断的影响 - 网易杭州QA - 网易杭州 QA Team
 
控制台输出为
36
24
可以得出一个汉字用GBK编码为2个字节,用UTF编码为3个字节(计算机基础。。。不够扎实。。。。)

由此可以知道bug的来源即是默认编码方式的区别。而如何解决这个bug也顺利成章的将getBytes方式设定为“GBK”即可
本地环境和测试服务器的编码方式对字符串长度判断的影响 - 网易杭州QA - 网易杭州 QA Team
 

bug解决,希望大家看到这篇文章不用掉进同一个坑。。


  评论这张
 
阅读(223)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016