惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - №阿儒№

Inetinfo 进程 100%的解决方法 useless setTimeout call (missing quotes around argument?)解决方案 "invalid header field"解决方案 解决因为安装Lingoes 2.4后剪贴板无法正常工作的问题 FreeMarker学习 Extjs分页时遇上ivalid label的解决原理 [错误解决列表]解决异常信息 收集中 解决WEB页的中英文显示问题 [bug]Upload Excel File时碰到的问题 [bug]解决因系统问题无法连接MQ reporting service学习-- 配置文件 [bug]访问ASP.NET临时文件夹的权限问题 如何解决FTP上传文件时出现的"Access is denied"错误? - №阿儒№ SQL Server 2005 Reporting Services 初次使用感受 [bug]Server Application Unavailable VS 中最简单的部署方式XCOPY Link Server的语法 [Bug]:创建虚拟目录出现别名已经存在的解决方案 将HTML中的内容存入WORD
UTF8与UTF8 without BOM之间的问题 - №阿儒№
№阿儒№ · 2008-04-11 · via 博客园 - №阿儒№

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();
    }

}