ホームページ  >  記事  >  バックエンド開発  >  PHP で生成された文字化けした CSV ファイルを UTF-8 エンコードで開く方法の解決策

PHP で生成された文字化けした CSV ファイルを UTF-8 エンコードで開く方法の解決策

WBOY
WBOYオリジナル
2016-07-25 08:52:221189ブラウズ
PHP は utc-8 でエンコードされた csv ファイルを生成します。excel を使用してそれを開いて文字化けを確認し、参考のために解決策を共有します。

openoffice は正常に開きますが、Excel は正常に開きません。この問題は、エンコードを変換した後にのみ解決できます。

後でわかったのですが、その原因は出力された CSV ファイルに BOM がなかったからでした。

BOMとは何ですか?

UCSエンコーディングには「ZERO WIDTH NO-BREAK SPACE」という文字があり、そのエンコーディングはFEFFです。 FFFE は UCS には存在しない文字ですので、実際の送信では出現しないはずです。 UCS 仕様では、バイト ストリームを送信する前に文字「ZERO WIDTH NO-BREAK SPACE」を送信することを推奨しています。

このように、受信機が FEFF を受信した場合、それはこのバイト ストリームがビッグ エンディアンであることを意味します。 FFFE を受信した場合、バイト ストリームがリトル エンディアンであることを示します。したがって、「ZERO WIDTH NO-BREAK SPACE」という文字は BOM とも呼ばれます。 UTF-8 では、バイト順序を示すために BOM は必要ありませんが、BOM を使用してエンコード方式を示すことができます。 文字「ZERO WIDTH NO-BREAK SPACE」の UTF-8 エンコーディングは EF BB BF です。したがって、受信側が EF BB BF で始まるバイト ストリームを受信すると、それが UTF-8 でエンコードされていることを認識します。 Windows は、BOM を使用してテキスト ファイルのエンコーディングをマークします。

それでは、PHP で BOM を出力するにはどうすればよいでしょうか?

すべてが出力される前に: print(chr(0xEF).chr(0xBB).chr(0xBF));



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。