UTF-8与UTF-8 BOM - bijian1013 - 博客园
文章推薦指數: 80 %
在我们通常使用的windows系统中,我发现了一个有趣的现象。
我新建一个空的文本文档,点击文件-另存为-编码选择UTF-8,然后保存。
首页
新闻
博问
专区
闪存
班级
我的博客
我的园子
账号设置
简洁模式...
退出登录
注册
登录
bijian1013
UTF-8与UTF-8BOM
在我们通常使用的windows系统中,我发现了一个有趣的现象。
我新建一个空的文本文档,点击文件-另存为-编码选择UTF-8,然后保存。
此时这个文件明明是空的,却占了3字节大小。
原因在于:此时保存的编码方式自动会变为UTF-8BOM。
一.一个汉字在不同的编码方式中占多少字节?
1.在UTF-8中,一个汉字占3个字节(一个字符占一个字节)
2.在ASCII码中,一个汉字占2个字节(一个字符占一个字节)
3.在Unicode编码中,一个汉字占2个字节(一个字符同样占两个字节,所以JAVA中chara='中';是可以的)
二.什么是BOM BOM(byte-ordermark),即字节顺序标记,它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型。
对于UTF-8来说,BOM并不是必须的,因为BOM用来标记多字节编码文件的编码类型和字节顺序(big-endian或little-endian)。
在绝大多数编辑器中都看不到BOM字符,因为它们能理解Unicode,去掉了读取器看不到的题头信息。
若要查看某个Unicode文件是否以BOM开头,可以使用十六进制编辑器。
下表列出了不同编码所对应的BOM。
BOMEncoding
EFBBBFUTF-8
FEFFUTF-16(big-endian)
FFFEUTF-16(little-endian)
0000FEFFUTF-32(big-endian)
FFFE0000UTF-32(little-endian)
三.BOM的来历 为了识别Unicode文件,Microsoft建议所有的Unicode文件应该以ZEROWIDTHNOBREAKSPACE(U+FEFF)字符开头。
这作为一个“特征符”或“字节顺序标记(byte-ordermark,BOM)”来识别文件中使用的编码和字节顺序。
Linux/UNIX并没有使用BOM,因为它会破坏现有的ASCII文件的语法约定。
四.带BOM和不带BOM的区别 「UTF-8」和「带BOM的UTF-8」的区别就是有没有BOM。
即文件开头有没有U+FEFF,也就是说有没有这个标记。
五.带还是不带?
不含BOM的UTF-8才是标准形式,UTF-8不需要BOM
带BOM的UTF-8文件的开头会有U+FEFF,所以我新建的空文件会有3字节的大小。
如果你的编程平台需要跨平台编译,比如,会在linux平台上编译,而不是只在windows上运行,建议不带BOM,unicode标准就是不带,带BOM毕竟那是微软的那一套,带了会出现很大的问题。
反之,如果你的程序只在windows平台上编译出windows程序,这个可有可无。
注意:这里所说的带还是不带,指的是:源码字符集(thesourcecharacterset)-源码文件是使用何种编码保存的;
不过,现在linux平台下的GCC4.6及以上的版本已经可以支持带BOM的源码了!!!!!
所以之前出现的问题也可以不用冲突,带或者不带,以后就不会成为一个问题。
六.创建UTF-8(而非UTF-8BOM)文件的方法
在发现文件另存为UTF-8缺得到UTF-8BOM文件后,我们怎样才能得到UTF-8呢?
方法1.先另存为UTF-8保存,再使用notepad++打开,把里面的编码设置为无BOM的UTF-8然后保存。
(此方法治标不治本,因为当你再次在里面写汉字时,文件会自动变成UTF-8BOM)
方法2.用JAVA代码
参考文章:
https://blog.csdn.net/legendaryhsl/article/details/78794121
https://blog.csdn.net/u014805066/article/details/78874460
postedon
2018-10-2115:50
bijian1013
阅读(3154)
评论(2)
编辑
收藏
举报
刷新评论刷新页面返回顶部
导航
Poweredby:
博客园
Copyright©2022bijian1013
Poweredby.NET6onKubernetes
延伸文章資訊
- 1這些是什麼? BOM/UFT-8有簽章/withBOM/withoutBOM - iT 邦幫忙
這是另一篇關於BOM之亂的描述. Windows 作業系統不少程式(像是記事本),預設會對UTF-8 檔案加上BOM 而Linux 則避免妨礙到像是解譯器腳本而不加BOM,對於沒有預期要 ...
- 2UTF8文件帶BOM引起的問題 - 台部落
UTF-8 不需要BOM,儘管Unicode 標準允許在UTF-8 中使用BOM。 所以不含BOM 的UTF-8 纔是標準形式,在UTF-8 文件中放置BOM 主要是微軟的習慣(順便提 ...
- 3What's the difference between UTF-8 and UTF-8 with BOM?
The UTF-8 BOM is a sequence of bytes at the start of a text stream ( 0xEF, 0xBB, 0xBF ) that allo...
- 4UTF-8 BOM (Byte Order Mark) 的問題@新精讚
然後提到了很多程式, 尤其是unix 上的工具和一些xml 工具, 只能處理沒有加上BOM 的UTF-8 檔案, 以及根據標準, 為甚麼這樣子不能叫做符合標準, 他有順便錶一下自家的 ...
- 5utf 8與utf 8無BOM的區別 - w3c菜鳥教程
utf-8(8-bit unicode transformation format)是一種針對unicode的可變長度字元編碼,又稱萬國碼。 bom—byte order mark,位元組序標記.