工作中一次同事让帮忙查看一个bug问题,问题的内容是有一串空间字符串
POLYGON ((533773.3184787547 3113107.2679840983,534179.6510204338 3113081.4478734056,533773.3184787547 3113107.2679840983))
在转换为空间对象时报错,错误的提示是533773.3184787547 3113107.2679840983不是为正确的数字;
在看到这个提示的时候第一时间想到的是字符串的截取出错了,应该是字符串的格式有问题。
但是查了一遍格式没发现有什么问题,这时同事给我展示了另外一个可以正常转换的空间字符串
POLYGON ((533773.3184787546 3113107.267984098,534179.6510204336 3113081.447873405,533773.3184787546 3113107.267984098))
我对照了一下除了坐标数据不一致格式是完成的一模一样;
这时我想的是方便一做转换的dll文件来查问题的原因,最后因为内容有点都加上自己能力有限,这条路没走通。
这时我是暂时没头绪是什么情况,把两个字符串都复制到vs code中看着发呆。
无意中发现两个字符串中横纵坐标中的空格好像不一样,正常情况下选中一个字符vs code会自动将当前文件中相同的字符高亮显示;
但是这里我选中上面那个字符串中的空格,同字符串的空格会高亮显示,但是下面字符串的空格却没有。
于是我在代码中将两个字符串转为字节数组,确实发现两个空格的字节码不同一个是32一个是160,
在ASCII码中32确实对应的是空格,但是没有160的对应码。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iN0MzMkNGNzgjN5EmZkZzN4gDNwETO3gDM5MGOkRTYy8CX2EzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
又查了一下Unicode码160对应的字符也与显示的字符不一致;
这时想到这个数据是由浏览器提交,大多数浏览器默认使用ISO-8859-1编码的;
查了ISO-8859-1对照表确实查到了160对应了一个空格 不间断空白符
,