utf-8 with bom格式的文件

前言

经常使用配置文件,一般而言是utf-8,少量的GBK等,实际上utf-8还有一种utf-8 with bom格式,那么这种格式有什么区别,什么是BOM呢。

示例

创建一个utf-8 with BOM的格式文件

使用Java读取这个文件

可以看到我们创建文件时并没有空格,而实际读取文件后莫名有个空格,使用go语言试试

 

仍然有空格,那么空格是怎么来的呢,为啥是空格,文件保存时明明没有空格

原理解析

实际上这个空格就是BOM的占位符,在字符串中,表示为空格,如果使用utf-8无BOM格式,这个空格是不存在的,经常配置文件是不能有BOM的,因为很多第3方中间件或者SDK并没有针对BOM处理,为了避免麻烦,尽量使用无BOM的根式文件。

debug发现读取的utf-8 with bom的开头是带有\uFEFF的字符的,当然我这里是openJDK8,如果是JDK9及以上,就是byte[]存储了,毕竟在一定情况下,byte[]比char[]省空间,而JDK很多情况就是char[]数组占用大量内存。

 各个语言遵循相同的规范

进一步发现,解析出来的空格实际上是ZWNBSP(zero-width no-break space),这个字符,它的编码正是0xFEFF,即\uFEFF,就是BOM字符。如果文件是utf-8编码,使用这个字符可以判断文件是否utf-8 with bom文件。

总结

实际上utf-8 with BOM就是编码文件前,带个空白的字符,实际上缺很容易造成配置文件的读取解析问题,毕竟不是所有sdk、中间件等做了BOM解析,而且目前绝大部分文件编码都是utf-8,所以需要注意,同时需要注意编码,如果用非当前编码的编码解析文件,中文就会乱码。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值