UTF8 テキスト ファイルを保存するときに、署名するかどうかを選択できます。つまり、BOM 形式のエンコーディングがあるか、BOM 形式のエンコーディングがありません。ファイルの内容を見ると、違いはありません。次のファイル (schema.sqlite.sql) を例に挙げます。
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 を実行する必要があります:
$schemaSql = file_get_contents(dirname(__FILE__) . '/schema.sqlite.sql'); -> getConnection()->exec($schemaSql);
この場合、「UTF8 署名に使用される 3 バイト」が実際にはファイルの先頭にあるため、署名付きのファイルは問題を引き起こします。その結果、上記のステートメントは正常に実行できません。
解決策も非常に簡単で、ファイルの UTF8 署名を削除するだけです。
もちろん、上記のファイルの内容は実際にはシングルバイトなので、UTF8エンコードで保存する必要はありません。
補足: シングルバイトのコンテンツを含むファイルに UTF8 署名が追加されていない限り、そのファイルを再度開いたときは、引き続きシステムのデフォルトのエンコーディングが使用されます。
http://www.bkjia.com/PHPjc/364391.html
www.bkjia.com