zoukankan      html  css  js  c++  java
  • UTF8文件的签名问题

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

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

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

    schema.sqlite.sql

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

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

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

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

    $schemaSql = file_get_contents(dirname(__FILE__. '/schema.sqlite.sql');

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

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

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

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

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

  • 相关阅读:
    使用Distinct()内置方法对List集合的去重 问题
    TCP连接与HTTP请求
    ASP.NET MVC 使用 Authorize 属性过滤器验证用户是否已登录
    C#进阶系列——WebApi 跨域问题解决方案:CORS
    关于设计模式的六大原则
    C# WebApi 接口传参详解
    数据库数据流量太大-问题诊断
    docker的build生成镜像和启动container
    docker生成dotnet core镜像
    NET Core 源码浏览站点工具
  • 原文地址:https://www.cnblogs.com/rethink/p/1593050.html
Copyright © 2011-2022 走看看