Unicode署名BOMによる事故原因の分析

Unicode署名BOMによる事故原因の分析
ここでは、通常ヘッダーとフッターに対して行われるインクルード ファイルを使用している可能性があります。インクルードされたファイルを開くと、ページのプロパティの「Unicode 署名 BOM を含める」という項目にチェックが入っていました。この BOM が事故の原因であるとお伝えします。

ユニコードbom

今日、JS スクリプトを書いているときに別の BOM 事故に遭遇しました。
外部 JS をページに挿入したところ、その中に次の文がありました: $.getJSON("/my/newmsg", function(data){alert(data);}); 他のブラウザでは正常にコンテンツがポップアップ表示されましたが、IE では表示されませんでした。私は 1 時間近く落ち込んでいました。この文が間違って書かれているのではないか、JSON データ形式が間違っているのではないか、私の性格に問題があるのではないかと思いました...
その後、エンコードが間違っているのではないかと疑い、BOM をチェックしてみました。それを削除するとすぐに、暗雲の下から奇跡が現れました。
私は怠け者でめったにブログを更新しませんが、この事件は本当に予想外だったので思いついて記録しなければなりません。JS も BOM による事故を引き起こす可能性があります - -|

Unicode 仕様には BOM の概念があります。
BOMとはByte Order Markの略で、バイトオーダーマークのことです。これは普通のテキストエディタでは見ることができません。ファイルヘッダーと言えるのでしょうか?バイナリエディタでのみ表示されますか?そうかもしれません。
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 を使用してテキスト ファイルのエンコードをマークします。

<<:  パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

>>:  Mailtoを使えばHTMLでメールを送るのは簡単

推薦する

Windows 10 Home Edition に Docker をインストールする方法

最近、プロジェクトをアップグレードするために Docker を使用しました。これまで使用したことがな...

Linux の操作とメンテナンスの基本システムディスク管理チュートリアル

1. ディスクパーティション: 2. fdiskパーティションディスクが2 TB未満の場合はfdis...

docker公式mysqlイメージのカスタム構成の詳細な説明

インストール時間を節約するために、公式の mysql docker イメージを使用して mysql ...

Windows 10 での MySQL 5.7.21 winx64 のインストールと設定方法のグラフィック チュートリアル

mysql 5.7.21 winx64 のインストールと設定方法: MySQLのコミュニティバージョ...

ソケット '/tmp/mysql.sock' 経由でローカル MySQL に接続できない解決策

エラーメッセージ:エラー 2002: ソケット '/tmp/mysql.sock' ...

HTMLセマンティクスと関連するフロントエンドフレームワークの詳細な分析

セマンティクスについて意味論は、記号やシンボルとそれらが表す意味との関係を研究する学問です。言語学で...

PythonはデータベースMySQLの解凍バージョンのインストール構成に接続し、問題が発生しました

導入今日は Python でデータベースに接続する方法を学んだので、MySQL データベースをインス...

Zabbix Agent2を使用してOracleデータベースを監視する方法

概要zabbix バージョン 5.0 以降では、zabbix-agent2 という新しい機能が追加さ...

Apple 電卓の JS 実装

この記事の例では、Appleの電卓を実装するためのJSの具体的なコードを参考までに共有しています。具...

JavaScriptのURLオブジェクトとは何かについて話しましょう

目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...

CSS で 3D ルービック キューブを実装するサンプル コード

今日は簡単な3Dルービックキューブを作ってみましょうまずはレンダリングを見てみましょう!これを学んだ...

テーブルの幅を固定して、テキストによって幅が変わらないように設定

ページ内のテーブルの幅を width="600px" に設定した後も、幅が固定さ...

Linux で rsync を使用する方法

目次1. はじめに2. インストール3. 基本的な使い方3.1、-rパラメータ3.2、-aパラメータ...

適応的な幅と高さを持つ9つの正方形グリッドの背景画像の切り取りの分析

<br />幅と高さが適応するオリジナルの 9 グリッド レイアウトをベースに、ネットワ...

画像ブラインド表示の効果を実現するための純粋な CSS の例

まず、完成した効果をお見せしましょう 主なアイデア: 実際、このブラインドは一種の手品を使用していま...