记一次字符编码引起的bug
工作中一次同事让帮忙查看一个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的对应码。
又查了一下Unicode码160对应的字符也与显示的字符不一致;
这时想到这个数据是由浏览器提交,大多数浏览器默认使用ISO-8859-1编码的;
查了ISO-8859-1对照表确实查到了160对应了一个空格 不间断空白符 ,
而ISO-8859-1是ASCII的扩展同时拥有两种空格所以看起来两个字符串的格式是一致的,但是实际上两个空格是不同字符的。
这就导致字符截取时无法截取,导致出现了上述的问题出现,
至此问题产生的原因就得到最终的解释了。
原文地址:https://www.cnblogs.com/lzh-jiu/p/15018975.html
- HBase Region自动切分细节
- eclipse搭建ssh后台
- 解决mysql漏洞 Oracle MySQL Server远程安全漏洞(CVE-2015-0411)
- im4java包处理图片
- centOS7 mini配置linux服务器(五) 安装和配置tomcat和mysql
- RedisPool操作Redis,工具类实例
- centOS7 mini配置linux服务器(四) 配置jdk
- 老司机教你“飙”EventBus3
- Android listView异步下载和convertView复用产生的错位问题
- 实用Android 屏幕适配方案分享
- java-FFmpeg(一) 实现视频的转码和截图功能
- websocket(二) websocket的简单实现,识别用户属性的群聊
- websocket教程(一) 非常有趣的理解websocket
- 前端插件——头像截图上传插件的使用(带后台)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Vue 轻量级后台管理系统基础模板
- R语言对混合分布中的不可观测与可观测异质性因子分析
- JavaScript同步、异步及事件循环
- Node.js开发人员都应该知道的12个有用的包
- 欧拉函数的几条重要性质
- 迷宫问题的简单栈实现
- xmuC语言程序实践week 3 大作业
- xmuC语言程序实践week 4 大作业
- R语言预测人口死亡率:用李·卡特(Lee-Carter)模型、非线性模型进行平滑估计
- 前端的发展历程
- R语言蒙特卡洛计算和快速傅立叶变换计算矩生成函数
- Visual Studio 中万能头文件编译不了的解决方案
- Difference in two ways of using lower_bound [C++]std::set::lower_bound与std::lower_bound
- 迷你版Vue--学习如何造一个Vue轮子
- 如何用R语言绘制生成正态分布图表