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

何谓BOM? “EF BB BF” 这三个字节就叫BOM,BOM的全称叫做"Byte Order Mark". 在UTF-8文件中常用BOM来表明这个文件是UTF-8文件, 而BOM的本意是在UTF-16中用来表示高低字节序列的。在字节流之前有BOM表示采用低字节序列(低字节在前面),而UTF-8不用考虑字节序列,所以其实有无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的问题。
所以解决此问题最根本的方法就是在保存UTF-8编码的文件时,不要使用BOM。

微软的记事本Word等只能正确打开含BOM的UTF8文件,然而UltraEdit却恰恰相反,会把BOM UTF-8文件误认为ascii编码。
UTF-8的BOM是 EFBBBF,因为UE载入UTF-8文件会转成Utf16,上述的EFBBBF 在Utf16中是FFFE(Unicode-LE的BOM),UltraEdit不认识BOM又加多一個BOM,所以有2个FFFE。文件就被它破坏了。

当应用程序的文件使用 UTF8 编码时,在保存文件时,一定要注意 BOM 的问题。那么如何将UTF8 without BOM转换成UTF8呢?

using (TextReader input = new StreamReader(new FileStream(@"C:\Test.properties", FileMode.Open), Encoding.UTF8))
{using (TextWriter output = new StreamWriter(new FileStream(@"C:\Test2.lmx", FileMode.Create), Encoding.UTF8)){int BufferSize = 8096;char[] buffer = new char[i];int len;while ((len = input.Read(buffer, 0, i)) > 0){output.Write(buffer, 0, len);}input.Close();}
}

http://www.cnblogs.com/zhongru_tu/archive/2008/04/11/1147792.html

因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

使用Windows的童鞋要特别注意:

千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without BOM即可

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000

UTF-8与UTF-8 without BOM相关推荐

  1. UTF—8与UTF—8(无bom)格式

    BOM--Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE在U ...

  2. Unicode、UTF-8 和 ISO8859-1到底有什么区别(转载)

    本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 c ...

  3. 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级.整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的&quo ...

  4. 【转】谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级.整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的&quo ...

  5. 转:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级.整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的" ...

  6. c++ uint32转为int_【转】用python将GBK编码文件转为UTF-8编码文件

    学习资料: 字符集与字符编码 - 网易云课堂​study.163.com 有的时候我们有一些网页的项目,需要用到JavaScript读取一些文本文件,用以读取数据:但各种文本文件的编码方式不尽相同,特 ...

  7. 关于编码ansi、GB2312、unicode与utf-8的区别

     关于编码ansi.GB2312.unicode与utf-8的区别 2014-01-25 08:51 529人阅读 评论(0) 收藏 举报 本文章已收录于: 关于编码ansi.GB2312.uni ...

  8. 计算机字符编码详尽讲解

    文章来源:http://www.guokr.com/blog/763017/ 下载一个文档,一打开发现是乱码,不抓狂才怪--你们都知道,这都是字符编码闯的祸.ASCII.ANSI.GB18030.Un ...

  9. 【转】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型...

    原文网址:http://www.crifan.com/python_head_meaning_for_usr_bin_python_coding_utf-8/ #!/usr/bin/python 是用 ...

  10. python 处理python编码的基本过程

    概括.从python1.6开始就可以处理unicode字符了. 出处:http://developer.51cto.com/art/201012/241226.htm 一.几种常见的编码格式. 1.1 ...

最新文章

  1. [ZJOI 2010]count 数字计数
  2. ABAP:FTP Using SAP Functions
  3. 【Top】Plan (updating...)
  4. 如何测试一个财务软件系统,对比测试工具平台让财务测试飞起来
  5. Java NIO学习
  6. 《三体》动画版官宣!B站出品 刘慈欣“倒吸一口凉气”
  7. 【报告分享】2020技术趋势报告-德勤-202003.pdf(附120页pdf原文下载链接)
  8. html 怎么几秒后自动隐藏,js设定DIV显示时间并动态显示时间倒计时多少秒,倒计时完了之后该层自动隐藏。...
  9. 比特币 POW 白皮书 区块篡改成功的概率 代码 注释详解
  10. List求交集、补集
  11. jeeplus-一款款可一键生成前后端代码的开发平台
  12. 正大市场监管总局、发改委、证监会联合提醒告诫部分铁矿石
  13. 西瓜书(周志华):什么是版本空间以及如何求取版本空间
  14. 对传统优化算法的一些总结(上)
  15. 计算机中网络协议三要素,网络协议的三要素是什么?各有什么含义?
  16. 相对定位中整周模糊度确定方法
  17. 计算机网络原理参考资料,《计算机网络原理》3 (2021)在线作业参考资料
  18. 2021年茶艺师(中级)考试技巧及茶艺师(中级)模拟考试题库
  19. 哈工大计算机学硕专硕分开排名,哈工大计算机考研经验谈
  20. 为什么监控显示没有连接服务器,为什么看幼儿园监控就显示连接检验服务失败请 – 手机爱问...

热门文章

  1. 销售易和纷享销客的“生存经”
  2. 懒人福音,分享4个实用的Python自动化脚本
  3. 有道少儿词典正式上线,CEO周枫发朋友圈:“是时候让小学生词典进入互联网时代了”...
  4. TOOL 一个裴蜀定理解析器
  5. 聊一聊泛型的可空性 (kotlin)
  6. 虚幻引擎测试题(一)
  7. 七年老安卓的九十月小结
  8. python 去掉空格_Python去除多余空格
  9. Oracle的dual是什么东西啊
  10. python爬虫爬取京东_python爬取京东价格