/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