UTF8与UTF8 without BOM之间的问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

UTF-8 编码的文件可以分为no BOM 和 BOM两种格式。

何谓BOM? "EF BB BF" 这三个字节就叫BOM,BOM的全称叫做"Byte Order Mard".在utf-8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意实在utf16中用来表示高低字节序列的。在字节流之前有BOM表示采用低字节序列(低字节在前面),而utf8不用考虑字节序列,所以其实有无BOM都可以。UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是 “奎”还是“乙”?

如果文件保存时,选择了使用 BOM,那么就可能会出现 headers already sent 的问题。
因为 Web 服务器软件可能不认识 BOM,所以就把 BOM 的两个特殊字节当做字符发送给浏览器了。
这时再调用 session_start() 等函数,就会出现 headers already sent 的问题。
所以解决此问题最根本的方法就是在保存 UTF8 编码文件时,不要使用 BOM。

微软的记事本 Word 等只能正确打开含BOM的UTF8文件,然后UltraEdit却恰恰相反,回把BOMutf8文件 误认为ascii编码。

UTF-8的BOM是 EFBBBF,因为UE载入UTF-8文件会转成Utf16,上述的EFBBBF 在Utf16中是FFFE(Unicode-LE的BOM),UltraEdit不认识BOM又加多一個BOM,所以有2个FFFE。文件就被它破坏了。


当应用程序的文件使用 UTF8 编码时,在保存文件时,一定要注意 BOM 的问题。

判断文件夹是否为空&&file.length()一直等于0 判断文件夹是否为空 file.length()一直等于0 File file = new File(“C:\\a”);//a是文件夹 System.out.println(file.exists()); System.out.println(file.length()); 此时得到的length一直都是0 file.length()获得文件夹大小 File file = new... 阅读详情

相关推荐

Java之IO流

IO流 在设备之间进行数据传输的操作 在方向上: 输入流、输出流 在单位上: 字节流、字符流 字节流 字节输入流:InputStream 字节输出流:OutputStream 两个抽象类,不能直接实例化,提供了一些具体的子类.例如: XXXInputStream XXXOutputStream 都是字节输入流字节输出流的子类 ...

qq_43336579的博客 254

UTF8UTF8 without BOM区别

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。提升架构认知不是一蹴而就的,它离不开刻意学习思考。**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。,第一时间获取最新知识点Android架构师之路很漫长,一起共勉吧!

egrhef的博客 549

java file.length 单位_Java.io.File.length()返回0

我正在为ftp文件传输做一个applet,我需要知道本地文件的大小(下载简历).问题是File.length()返回0.该文件存在(使用File.exists()检查),并且具有超过0个字节(至少在Windows中).我不知道在哪里可以找到为什么length()返回0.这是代码结果的一部分.long fileOffset = 0;if(localfile.exists()){fileOffset...

weixin_29266647的博客 1545

utf8 bom and without bom

UTF-8「带 BOMUTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF。 python在使用时,直接读取with bom的文件会有问题, 使用str.strip('\ufeff')去除bom ...

weixin_38825407的博客 2344

UTF-8 without BOM

UTF-8编码的文件有without BOMBOM两种格式,最好使用UTF-8 without BOM格式。 BOM,即Byte Order Mark,意为字节序标记。UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了,软件通过BOM来识别这个文件是否是UTF-8编码。 BOM的本意是在UTF-16中用来表示高低字节序列的。在字节流之前有BOM表示采用低字节序列(低字节在前面),而UTF-8

宇脩 2289

Excel打开无BOM-UTF8文件中文乱码

  运营同学需求扫库统计全服大V玩家,在数据库上扫出结果发过去之后,反馈说使用Excel打开玩家姓名都是乱码。看了下发过去的文件,发现都是linux下不带BOMUTF8编码文件,而Excel作为Windows下的软件,需要使用BOM头来确定文件为UTF8编码,所以需要给文件加上BOM头。   一般的需求都是去掉BOM头,这次需求居然是加上BOM头,比较奇怪,不过试了下,发现用Pyth...

anyan90129的博客 669

2018-5-19-创建不带BOM-UTF8

title author date CreateTime categories 创建不带BOMUTF8 lindexi 2018-05-19 14:11:33 +0800 2018-2-13 17:23:3 +0800 如果使用 StreamWriter 创建的文本,都是默...

lindexi 643

关于Encode in UTF-8 without BOM

关于Encode in UTF-8 without BOM定义BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码。介绍UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。但不含 BOMUTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:

绯浅yousa的笔记 4163

UTF-8UTF-8 without BOM区别

UTF-8 without BOM`(或通常写作 “UTF-8BOM”)是指使用 UTF-8 字符编码的文本文件,并且在文件的开始处不包含字节顺序标记(Byte Order Mark, BOM)。BOM 对于 UTF-8 编码的文件来说是可选的,并且不会改变 UTF-8 文本的解析方式,但在某些情况下,BOM 的存在可能会导致问题或不一致的行为。在Linux中,当提到UTF-8编码的文件时,通常指的是不带字节顺序标记(Byte Order Mark, BOM)的UTF-8编码。

qq_41354600的博客 1798

vs2015 选项解决UTF-8 without BOM 源码中文输出乱码问题

本来我已经参考网上关于C++中文输出乱码的文章解决了,如下面的代码输出前调用wcout.imbue设置locale,就可以正常输出中文了。 std::wcout.imbue(std::locale(std::locale(), "", LC_CTYPE)); std::wcout << L"江清月近人" << std::endl; 1 2 但是同样的方法换在另一个程序中还...

hlday6的专栏 659

UTF-8UTF-8 without BOM

UTF-8编码的文件可以分为without BOMBOM两种格式。 何谓BOM? "EF BB BF" 这三个字节就叫BOMBOM的全称叫做"Byte Order Mark". 在UTF-8文件中常用BOM来表明这个文件是UTF-8文件, 而BOM的本意是在UTF-16中用来表示高低字节序列的。在字节流之前有BOM表示采用低字节序列(低字节在前面),而UTF-8不用考虑字节序列,所以其实

Just do IT 1万+

python utf8 bom,在Python中将没有BOMUTF-8转换为带有BOMUTF-8

Two questions here. I have a set of files which are usually UTF-8 with BOM. I'd like to convert them (ideally in place) to UTF-8 with no BOM. It seems like codecs.StreamRecoder(stream, encode, decode,...

weixin_39609483的博客 705

C#创建UTF8BOM文本文件

In order to omit the byte order mark (BOM), your stream must use a custom instance of UTF8Encoding instead of the default System.Text.Encoding.UTF8: 1.Call the UTF8Encoding constructor with Fal...

aimengge6193的博客 744

utf-8utf-8 without BOM

UTF-8编码的文件可以分为without BOMBOM两种格式。 何谓BOM? " EF BB BF" 这三个字节就叫BOMBOM的全称叫做" Byte Order Mark". 在UTF-8文件中常用BOM来表明这个文件是UTF-8文件, 而BOM的本意是在UTF-16中用来表示高低字节序列的。在字节流之前有BOM表示采用低字节序列(低字节在前面),而UTF-8不用考虑字节序列,所以其实有无BOM都可以。UTF-8以字节为编码单元,没有字节序的问题UTF-16以两个字节为编码单元,在解释一个UTF

Maystyle的博客 847
上一篇: io.UnsupportedOperation: can‘t do nonzero end-relative seeks
下一篇: MacOS Big Sur下AndroidStudio全屏模式下打开新项目或项目弹窗界面都以标签打开的问题
知·味
博客等级 码龄11年 42粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值