最近在工作中遇到一个问题,需求是在改某个字段的值的时候,需要验证一下报文中的字段值的原值和库中的值是否一致,如果一致,才允许修改,否则退回,并提示,申报的原值和库中的值不一致。
问题:发现申报的原值和库中的值一致,但是退回了,而实际上不应该退回。
定位问题:怀疑存在特殊编码的问题,最后发现,申报报文中的空格的编码和库中的空格的编码不一致导致退回。所以验证值是否一直的程序没有问题。
申报报文中的空格的编码为(0x20),而库中的空格编码为(0xc2 0xa0);它们的16进制编码是不一致的。
那么为什么不一致呢??原数据是通过接口的方式传递给另一个系统,另一个系统只是在界面展示,然后修改后,和修改后的值一起再传回来。看似没有毛病,实际上存在问题。空格编码为(0xc2 0xa0)的字符串在界面显示时:1.如果时用label标签或者非表单标签显示,那么空格编码为(0xc2 0xa0)的字符串会自动转化为(0x20);2:如果使用Input标签(表单标签时)空格编码为(0xc2 0xa0)的字符串的编码保持不变。