java.time.format.DateTimeParseException: Text ‘xxxx-xx-xx xx:xx:xx‘ could not be parsed at index 10

目录

场景描述&排查

原因

处理


场景描述&排查

在前后端分离的交互当中,对一个JSON转换成object对象时出现了这样的问题

异常的字符索引为10,也就是说那个空格有问题。

把异常的日期字符串抓出来对比了一下

 奇怪。两个空格明明长得是一模一样的,为什么会报错呢?

两个运行试一试。

 

 戏剧性的问题出现了。两个一模一样的日期字符串,一个能正常运行,另一个不能。异常依旧说明那个不能正确运行的日期字符串中的空格有问题。但是根据上面的排查已经确定了那个空格并非全角空格,全角空格会比半角空格“胖”一点很容易用肉眼看出来区别。

排查到这里仿佛陷入了尴尬的境地,直到我想起了字符的ASCII码...毕竟肉眼可见的问题已经排查完了,现在就剩下肉眼不可见的东西还没排查了。

在java中,想要拿到某个字符的ASCII码需通过int类型来接收。当然想要从字符串里面拿到某个字符的ASCII码还得这么写:

接下来是获得两个空格的编码。

 运行

 可以看到那个正常的空格是32,对应ASCII码表是正确的。但是这个160的空格是怎么弄出来的呢?

毕竟这个有问题的日期字符串是前端传递过来的,也就是说前端在拼接日期字符串的时候使用了不合适的空格。

最后询问了一下前端发现前端使用的是 '\xa0' 作为空格的拼接符...

原因

前端使用了一个不合适的空格替换符 '\xa0'。导致后端日期格式转换器无法识别这样的空格出现异常。

处理

前端将 '\xa0' 换成32码点的空格(手打的空格)解决问题;

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值