/ufeff导致json对象无法获取

问题描述

今天遇到一个很奇葩的事情,在本地dev做别的事情的时候突然发现,一个项目的所有接口返回的json对象在前端都变成了json字符串了,由于前端是用vue写的,我前前后后找原因,找了半天发现后端response的json对象前面有一个空格 像下面这样

找到问题

发现是多了一个/ufeff 的字符 ,了解了后知道这个是bom头–
BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符(”\uFEFF”),位于文本文件头部。
这个本来没啥。但是PHP并不会忽略bom,所以在读取 包含或引用带有bom头的文件的时侯,会把bom当作文件的内容的一部分,一般这种问题都出在语言包文件等一些内容配置文件中。
使用window记事本等打开文件再保存就可能会生成bom头。

解决问题

定位出问题的地方。

首先问题一般都是出在自己的项目根目录内的文件
那我们先看看哪些文件带有bom头

首先cd到我们自己的项目根目录
//查找目录下带bom头的文件
//\xEF\xBB\xBF 这三个是bom文件开头

1
grep -r -I -l $'^\xEF\xBB\xBF' ./

处理问题文件

找到有问题的文件

清除相关文件的bom头

1
find 上面查出来的文件夹的路径 -type f -exec sed -i 's/\xEF\xBB\xBF//' {} \;

完成。

其他方法

知道哪些文件带bom头后,可以用nodepad++打开那个文件

转成UTF-8 格式 不要bom