调用三方接口返回值JSON字符串带BOM头"\ufeff",JSON解析死活报错。

我是用SpringBoot的RestTemplate调用三方接口的,一开始返回值我是用对象接收返回值,发现一直报错,我以为是RestTemplate的接收转换有问题,就将返回值换成了String类型去接收。接收到字符串后再转JSON、JSON字符串解析死活报错。

接口返回值日志如下:

  1. 2020-03-25 13:18:55.687 DEBUG 8595 --- [ main] o.s.web.client.RestTemplate : Response 200 OK
  2. 2020-03-25 13:18:55.688 DEBUG 8595 --- [ main] o.s.web.client.RestTemplate : Reading to [java.lang.String] as "application/json;charset=UTF-8"
  3. 2020-03-25 13:19:57.370 DEBUG 8595 --- [ main] com.hopefun.scm.open.api.EyuanApi : 返回值:{"message":"成功","code":"1"}

在IDEA开发过程中,一开始光看返回值打印的日志是看不出来任何毛病的,并且我将这个返回值的JSON字符串复制到Sublime编辑器中也看不出问题所在。

一开始很自信没有Debug查看返回值,后来当我开启了Debug模式后终于发现了问题所在。原来在JSON字符串前面还带着"\ufeff",导致JSON字符串解析报错,原来罪魁祸首是这个玩意"\ufeff"。Debug还是个好玩意啊。

终于发现问题所在解决就轻松多了。

  1. public static final String BOM = "\ufeff";
  2. /**
  3. * 去除BOM
  4. *
  5. * @param bomStr JSON字符串
  6. * @return 去除BOM后的JSON字符串
  7. */
  8. private String recursiveBom(String bomStr) {
  9. String str = "";
  10. if (bomStr.startsWith(BOM)) {
  11. str = bomStr.substring(1);
  12. if (str.startsWith(BOM)) {
  13. recursiveBom(str);
  14. }
  15. }
  16. return str;
  17. }
  18. //使用,如此得出来的字符串就是纯正的JSON字符串啦。妈妈再也不怕解析报错啦。。。
  19. recursiveBom(bomStr.trim());

赵小胖个人博客

JSON字符串带BOM头"ufeff"的更多相关文章

  1. python 带BOM头utf-8的响应解码

    接口响应编码格式为带BOM头utf-8.直接获取响应的text出现乱码. '''dinghanhua2018-11requests text与content,指定响应的encoding''' api ...

  2. Java 从 Redis中取出的Json字符串 带斜杠的问题解决方案

    Java 从 Redis中取出的Json字符串 带斜杠的问题: { "code": 200, "message": "成功", " ...

  3. 关于UTF8文件带BOM头可能会引起的错误解析

    今天在做一个文件上传的项目中碰到了一个十分奇怪的问题,在解析上传上来的csv文件时,总是在解析第一行的第一个标题字段时出错,就是第一个那个字段总是和对应的model字段对应不上,这个坑是真的很深,找了 ...

  4. 带BOM头文件解析

    在java中apache提供了一个工具类BOMStream,在获取文件流时,将获取到的文件流转化成为BOM流: InputStreamReader is = new InputStreamReader ...

  5. json_decode 解析带BOM头文件错误

    //取前三个字符 并转化为ASCII 判断是否为BOM文件 $charset[1] = substr($result, 0, 1); $charset[2] = substr($result, 1, ...

  6. python去除BOM头\ufeff等特殊字符

    1.\ufeff 字节顺序标记 去掉\ufeff,只需改一下编码就行,把UTF-8编码改成UTF-8-sigwith open(file_path, mode='r', encoding='UTF-8 ...

  7. php中隐形字符65279(utf-8的BOM头)问题和fwrite写入文件bom头导致的乱码问题解决

     php中隐形字符65279(utf-8的BOM头)问题 今天在CSDN看到一个php输出空白隐形字符65279的问题,在网上找了下,发下这个65279字符是php用来标记文件是utf-8编码的,输出 ...

  8. Namespace declaration statement has to be the very first statement in the script-去除bom头

    今天准备测试小程序的签名加密,但是刚引入官方的“加密数据解密算法”文件到项目里,然后为每个文件添加命名空间的时候,不管怎么加都报“Namespace declaration statement has ...

  9. UTF8最好不要带BOM,附许多经典评论

    UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM.所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一 ...

随机推荐

  1. SurfaceView和TextureView的区别

    SurfaceView和TextureView均继承于android.view.View,与其它View不同的是,两者都能在独立的线程中绘制和渲染,在专用的GPU线程中大大提高渲染的性能.Surfac ...

  2. Centos7.X 搭建Prometheus+node_exporter+Grafana实时监控平台

    Prometheus简介 什么是 Prometheus Prometheus是一个开源监控报警系统和时序列数据库 主要功能 多维数据模型(时序由 metric 名字和 k/v 的 labels 构成) ...

  3. Jprofile解析dump文件使用详解

    1 Jprofile简介 官网 下载对应的系统版本即可 性能查看工具JProfiler,可用于查看java执行效率,查看线程状态,查看内存占用与内存对象,还可以分析dump日志. 2 功能简介 选择a ...

  4. 初学Qt——QTableView+QSqlqueryModel

    我们在显示报表时可以用到上面两个类来实现,QTableView负责对视图显示:QSqlqueryModel则负责数据模块. 这里数据查询使用QSqlqueryModel主要是这个类可以通过自己写的查询 ...

  5. 如何提高码农产量,基于java的web快速开发平台之自定义表单开发随笔

    老板 :下班前一定写完? 程序猿:可以,下班前能一定给! 第二天早上上班~~~ 老板:这都第二天了,怎么没写完? 程序猿:我还没有下班呢! 哎!程序猿的痛啊 公司上线的项目有不少销售记录表,又是报价单 ...

  6. linux入门系列17--邮件系统之Postfix和Dovecot

    前文演示了通过Samba和NFS实现文件共享,本篇演示使用Postfix和Dovecot在局域网实现电子邮件收发系统. 电子邮件系统是我们日常生活和工作中非常重要的一个网络服务,在windows下收发 ...

  7. flask-restful 初探

    flask-restful 是 Flask 的一个用于支持 RESTful 的插件. 刚开始用对我来说还是比较坑的... 目录结构 / /test /test/common /__init__.py ...

  8. chorme浏览器记住密码后input黄色背景处理方法总结(三种)

    问题分析 正常情况: 记住密码后访问: 解决方法 方法1:阴影覆盖input:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px white ins ...

  9. 数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例)

    数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例) 简介 scikit-learn 估计器 加载数据集 进行fit训练 设置参数 预处理 流水线 结尾 数据挖掘入门系 ...

  10. Aircrack-ng无线审计工具破解无线密码

    Aircrack-ng工具 Aircrack-ng是一个与802.11标准的无线网络分析的安全软件,主要功能有网络探测.数据包嗅探捕获.WEP和WPA/WPA2-PSK破解.Aircrack可以工作在 ...