小谈Vim打开文件开头的<feff>
在本地Windows机上开发的PHP程序上传到linuxserver上后,通过浏览器訪问对应接口。发现返回的数据前多了一个莫名的字符‘-’,甚为不解。之后通过网络抓包的方式,查看到接口返回数据前多了 EF BB BF。
出现了如此令人不知所以然的bug总是极度让人抓狂。经过了几番尝试之后,仍然不能得以解决,但也隐隐感认为可能是字符编码的问题,遂用PHPStorm新建了一个文件,然后又一次将之前出bug的文件内容重写了一遍(庆幸文件不是太大,用svn的话,应将文件回滚到之前没有bug的版本号),然后又一次上传。问题竟然攻克了。
喜悦中就此作罢,并没有深究当中的缘由。
原本以为bug就此解除,结果之后又碰到了一次,实在不能忍。这次查看代码并非採用在本机上改然后又一次上传server的方式,而是直接在server上用vim打开逐行查看。结果惊喜出现了。vim的文件头显示多了‘<feff>’字符。直觉告诉自己这就是罪魁祸首。于是进一步探究了<feff>字符。
这里首先说一下utf8、utf16、utf32编码。由于这样的编码相应多个字节,所以一般utf16和utf32会用BOM(Byte Order Mark,为不可见字符)标识内部编码的字节序(Big/Litttle Endian),而utf8加不加BOM都能够。一般我们用的编辑器utf8编码是没有加BOM标识的,可是windows下的记事本却会将utf8编码的文件前加上BOM标识。
而这个BOM标识即相应着linux环境下vim打开后出现的<feff>字符。
<feff>字符会出如今<?php
...?>的前面。PHP对这种文件进行解析时。会将这个字符输出,从而导致了上述的bug。
PS:还是少用记事本打开或编辑utf8编码的代码,血的教训啊。。!
小谈Vim打开文件开头的<feff>的更多相关文章
- Windows下Git Bash中VIM打开文件中文乱码
Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 admin@DESKTOP-O99620V MINGW64 /d/项目GGE/Hard_for_GGE (master) ...
- vim打开文件时显示行号
vim打开文件是,默认不提示行号. 至于显示行号的用途,因人而异 linux下一个主机可能有N个账户.对于配置分为两种:仅配置当前账户,配置所有账户 vim配置文件路径(Centos 5.5 fin ...
- Ubuntu下vim打开文件时,提示请按ENTER或其它命令继续
最近配置了一下vim,重启后,配置生效.但在用vim打开文件的时候,出现了一个问题:每次用vim打开文件的时候,都会提示请按ENTER或其它命令继续.这个真的很烦人.那么怎么把它消除掉呢? 首先要搞清 ...
- Vim 打开文件同时定位到某一行
在linux下,当后台某一行报警出错后,想用vim打开文件同时定位到某一行, Vim +某一行 filename 即可.
- 使用vim打开文件的16进制形式,编辑和全文替换
1.先用vim打开文件的二进制形式,如果不以二进制可能会产生转换错误. vim -b file-to-open.dat 2.用xxd把文件转换成十六进制格式 :%!xxd 现在就可以对待普通文本一样查 ...
- Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题
Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题 Debian9.4系统不能再VIM打开文件界面不能使用右键复制粘贴 root@debian:~# vim /usr/sh ...
- vi/vim打开文件提示Found a swap file by the name
问题分析 有一次在远程连接主机时,用vi打开文件my.ini却提示:Found a swap file by the name ".my.ini.swp".百度了下才知道,原来在使 ...
- VIM打开文件与保存文件
打开文件 VIM /etc/inittab 默认的安装没有设置ctrl_W为退出.也可以设置::map <C-W> :close<CR> 或:map <C-W> : ...
- Vim打开文件中文乱码如何解决?
今天想找一下之前的随机数组demo复习,在源文件src里用vim打开.java文件,中文出现乱码 vim也是,选项里没有直接选择设置utf-8之类的 查了下网上,http://easwy.com/bl ...
随机推荐
- spark作业
假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发 Spark应用程序实现如下功能: 1.实时统计连续网购时间超过半个小时的女性网民信息. 2.周末两天的日志文件第一列为姓名,第 ...
- day03_06 变量详解
print ("hello world") print("alex") print("jinxing") print("3乘以4= ...
- js 页面刷新 每N秒钟刷新一次页面
<!-- 每5秒钟刷新一次页面 --> <script>setTimeout("location=location; ", 5000); </ ...
- HDU - 1705 Count the grid
昨天吉老师讲了皮克定理 皮克定理用于计算点阵中顶点在格点上的多边形面积.对于一个顶点全部在格点上的多边形来说,它的面积计算有如下特点: 如果用a表示位于多边形内部的格点数,b表示位于多边形边界上的格点 ...
- 关于php ‘==’ 与 '===' 遇见的坑
两个的区别所有PHPer都知道, 今天在遍历 xmlNode时,自己写的代码就碰坑了 想遍历xmlNode为数组 得到的xmlNode为 想要把所有的simpleXmlElement对象都遍历转成数组 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 ——线段树 二分答案
听说是BC原题. 好题,二分答案变成01序列,就可以方便的用线段树维护了. 然后就是区间查询和覆盖了. #include <map> #include <cmath> #inc ...
- 23we
package com.test.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql ...
- mybatis学习(十一)——springmvc++spring+mybatis整合
做任何一个项目都以一个需求,这里先定义一下需求:利用三大框架查询酒店列表. 一.搭建开发环境 1.创建一个web项目 我这里用的是 jdk1.8+tomact7.0 2.创建hotel表 CREATE ...
- luogu 3708 koishi的数学题 递推 线性筛
题目链接 题意 输入一个整数\(n\)\((n\leq 1e6)\),设\(f(x)=\sum_{i=1}^n x\mod i\),你需要输出\(f(1),f(2)...,f(n)\). 输入输出格式 ...