UTF8与UTF8 without BOM之间的问题
来源:互联网 发布:linux ftp命令上传文件 编辑:程序博客网 时间:2024/06/11 13:41
原文地址:http://www.cnblogs.com/zhongru_tu/archive/2008/04/11/1147792.html
UTF8与UTF8 without BOM之间的问题
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 的问题。
那么如何将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();
}
}
- UTF8与UTF8 without BOM之间的问题
- UTF8 与 UTF8 +BOM
- utf8与utf8+bom的区别
- UTF8 与 UTF8 +BOM 区别
- UTF8 与 UTF8 +BOM 区别
- utf8的bom
- UTF8 BOM
- [编码] 无BOM的UTF8
- String 与 UTF8 之间的转换
- utf8与ansi之间的转换
- unicode与utf8之间的转换
- 使用python 3.0 处理utf8格式的文件BOM问题
- utf8+bom格式的文件与接口文件
- 转:UTF8与UTF8 without&nbsp…
- ANSI与UTF8之间的转换!std::string与UTF8之间的转换
- 编码-Windows中UTF8与BOM
- 如何识别无BOM的UTF8文本
- utf8编码文件的bom头
- [LeetCode]Evaluate Reverse Polish Notation
- Primes 2161
- 用eclipse建JavaWeb工程
- 团队敏捷实践:迭代演示会议规则--用户故事
- 初识协程 "C"
- UTF8与UTF8 without BOM之间的问题
- error: Missing required libcurl dev >= 7.18.2故障解决
- WorkflowSim 大数据工作流仿真软件介绍
- 配置优雅的iOS开发环境
- 更轻量的 View Controllers
- C# RSA 非对称加密
- 分数矩阵 2156
- 使用JavaMail收取邮件并解析
- Ant学习 之 [致命错误]