UTF8文件的签名问题

在我们保存UTF8文本文件的时候,可以选择带签名,或者不带签名。

也就是 有BOM 格式编码,或者 无BOM格式编码。

如果看文件的内容,是看不出任何差别的,以下列文件(schema.sqlite.sql)内容为例: 

 

ContractedBlock.gif ExpandedBlockStart.gif schema.sqlite.sql
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CREATE TABLE guestbook (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    email VARCHAR(
32) NOT NULL DEFAULT 'noemail@test.com',
    comment TEXT NULL,
    created DATETIME NOT NULL
);

CREATE INDEX 
"id" ON "guestbook" ("id");

 

如果不带签名,则文件的大小为232字节,如果带签名,则文件大小为235字节。

UTF8签名有3个字节(内容为:EFBBBF),是专门用来告诉软件:该文件是UTF8编码的。

在一般情况下,有无签名不会带来问题,因为编辑器或者其他软件可以按照文本的内容来推断出是否是UTF8。

 

但有些时候还是会导致问题,比如上诉文件。该文件是sql语句文件,程序恰好要通过以下语句(php)来执行该sql:

 

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> $schemaSql   =   file_get_contents ( dirname ( __FILE__ .   ' /schema.sqlite.sql ' );

$dbAdapter -> getConnection() -> exec ( $schemaSql ); 

 

在这种情况下,带有签名的文件就会导致问题了,因为“UTF8签名用的三个字节”其实是位于文件的最前面。所以导致了上面的语句无法成功运行。

解决的办法也很简单,去掉该文件UTF8签名即可。

当然,上面文件的内容其实都是单字节的,是没有必要保存为UTF8编码的。

 

补充:全部是单字节内容的文件除非加了UTF8签名,不然再次打开文件时,还是系统的默认编码而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值