那个带反斜杠的怪符号,到底长啥样? 在电脑键盘上,要是你正把手指头悬停在末尾,按下那个看起来像个"u"又像个小波浪的按键,你会忍不住划着嘴角笑出声。按下它,荧光屏上就会蹦出一串乱码:?️ufeff。

那时候你心里在想啥?大约是“哎哟,今天这键盘如何如此像个表情包网站?”要么“是不是系统想跟我玩个文字游戏?”实际上不用想那么多,它就是一个单纯的文件头。 这东西叫 BOM(字节顺序标记),英文全称是 Byte Order Mark。好办记个门道:计算机世界是个“数字海”,左边是 0 是正,右边是 1 是负,正数排得齐整整,负数排得歪歪扭扭。BOM 就是为了把这坑填平,给文件的开头贴上一个统一的“定海神针”。 那会儿,Windows 和 Mac 系统刚启动排版的时候,毛病挺多。

比如你写个“你好”,Windows 可能把“你”和“好”分开了,变成了“你”加一个空格再加“好”,结局汉字“好”的左边是个空格,右边是个空格。

这就叫“负一偏移”,看着像“你好 好”(两个空),在中文里这叫“回文词”,尴尬得让人想找个理由道歉。

还有“我”,变成了“我”加空格加“我”,左右都是空格,这就叫“一字两空”。

那时候你要是拿这个文档给别人看,对方看着直接懵圈,当作你是去跟他在玩文字游戏了。 为了改这个毛病,开发这文字的工程师们想了个绝招,就是给每个字加个 BOM,那就是那个反斜杠后面跟个 u,ufeff。一旦你在这个头加上它,所有的字瞬间都统一了。

不管你是中文“你好”,还是英文"Hello",只要前面这一玩意儿来了,所有字符就按顺序排好队,正数排正数,负数排负数,中间不会再有空格插队了。 这就好比给电影开头加了一个统一的工夫码,不管哪一集,工夫线都得从那个点启动算起,别整那些乱七八糟的八路军要么八路军特务插队。目前的版本,绝大多数软件、网页、编辑器,这玩意儿都是自带安装的,根本不用你手动去加。

要不就你是在开发底层系统,要么干一些超高级的逆向工程,这时候间或碰见它是个惊喜。 有人可能会问,那没有 BOM 文件如何办?比如你刚刚那个直接按下去,屏幕上直接蹦出那个符号的文件,叫 .utf-8-bom。

这种纯文本文件,在 Windows 上打开彻底没难题,系统自动识别了它,把它当成正常文件处理,啥也不用做。

只要不是那种带 HTML 标签的网页源码直接写在纯文本文件里,遇到 BOM 一般都是小事,系统会自动跳那会儿,就像你路过商店门口看到的广告贴纸,顺手扫一眼就扔进垃圾桶了。 但在某些特殊的场景下,比如你在一个纯文本编辑器里编辑了一段特殊的二进制数据,要么你正在处理一些古老的、不兼容的编码格式时,BOM 就显得格外关键了。

这时候它不只是是个装饰,而是个导航图。 举个具体的例子。假设你在写一个程序,里面要加载一段配置,这段配置是乱码状态,没有开头标记。

要是你把它直接插进正常的 UTF-8 文档里,程序读取的时候就会困惑:“咦?这里突然冒出来一个啥怪符号,是不是文件头坏了?还是我加载错了?”这时候,BOM 就像个“通行证”,告诉程序:“嘿,别慌,我前面已经乖乖排好了队,直接从这里启动读,后面的数据都是正常的。” 再举个数据处理的例子。你在处理视频文件要么二进制日志时,有时候会遇到这种情况:文件末尾,要么文件开头,静静地躺着一个 BOM 标记。

这时候,要是你直接按 Ctrl+F 去搜索,有时候搜不到,有时候搜出来一堆乱码。出于 BOM 是隐藏在前面的,只占一个字节的位置。而 UTF-8 编码是一个个字节组成的,BOM 是两个字节的组合(EF BB BF,在十六进制下)。

故此,在纯文本搜索模式下,搜索“ufeff"这个词,有时候会误报,有时候会漏报。

这就好比你在找一个藏在角落里的拼图碎片,有时候你盯着看它,它仿佛在笑;有时候你快速扫过,它就看不见了。

这时候你就明白,BOM 可能就在你看不见的地方等着呢。 并且,BOM 还有个有趣的特性,它实际上是可写的。别看现代系统默认把它隐藏起来了,但在一些特定的命令行工具要么二进制流处理中,要是不小心写错了,要么系统启用了某种“原始模式”,它可能会暴露出来。

这时候,你看到的就不是那个优雅的"u"了,而是一堆乱码。别揪心,这种情况极少见,一般意味着你的系统要么软件设置有点小偏差,捏微调一下就好了。 再看数据量的时候,你可能会好奇它占几个字节。

这得看具体编码了。在标准的 UTF-8 编码下,一个字符根本占一个字节,BOM 本身别看是两个字节(EF BB BF,共 3 个字节),但出于它只占了一个文件的位置,故此文件总大小可能只增添一个字节。

这就好比你开会,大家每人一句,总共几句话,文件长度只长了个零头,但里面可没说蹩脚。 大量人被 BOM 绕晕了,认定这是个“坑”,非要把它删掉。

实际上大可不必。在绝大多数日常办公、网页浏览、软件使用场景下,BOM 就是个“友好邻居”,是个默默守护的文件头。它是为了让中文和英文在电脑里“和谐共处”而诞生的功臣,是告别“一字两空”和“一字两空格”的终结者。 要不就你是在做那种极端的、底层级的、要么彻底绕开系统解析逻辑的活儿,否则你彻底能够安心地忽略它,就像不需求把路边的指示牌摘下来一样。

只要你的文件是“正体”编码(UTF-8、GBK、GB2312 等),BOM 的存有只会让事件更加顺利,让你少受一点“文件读错”的惊吓。 故此,下次要是你在文档编辑软件里不小心加了个 BOM,千万别慌,也别急着删。

只要你看一眼文件属性,确认编码是 UTF-8,放心大胆地持续写你的文字吧。

毕竟,ufeff 姓 BOM,它是系统为了让大家少犯迷糊而留下的一个小彩蛋,不是阻碍,是信号。