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でメールを送るのは簡単

推薦する

ページコンテンツ全体を中央に配置して、高さがコンテンツに合わせて自動的に拡張されるようにする方法

ページコンテンツ全体を中央に配置する方法と、コンテンツに合わせて高さを自動的に拡大縮小する方法。これ...

Nginx における 2 つの現在の制限方法についての簡単な説明

負荷は通常、システム設計時に予測されます。システムがパブリック ネットワークに公開されている場合、悪...

dockerでデプロイされたjenkinsでgitプログラムを実行する際の問題について

1. まず、gitを関連付けるときにエラーメッセージが報告されます: エラー: ビルドするリビジョン...

IIS7 IIS8 http は自動的に HTTPS にジャンプします (ポート 80 はポート 443 にジャンプします)

IIS7 では、「URL REWRITE2」疑似静的モジュールがインストールされているかどうかを確...

InnoDB ロック (レコード、ギャップ、Next-Key ロック) の詳細な説明

レコード ロックは、単一のインデックス レコードをロックします。レコード ロックは常にインデックスを...

Dockerコマンドの自動補完の実装

序文この友人がどれくらいDockerを使っていなかったのかは分かりませんが、突然Dockerコマンド...

Dockerディスク容量不足の問題を解決する

Docker が配置されているサーバーをしばらく稼働させたところ、サーバーのディスク ディレクトリの...

Excel をインポートするときに js で時間を変換する正しい方法について

目次1. 基本2. 問題の説明3. 解決策付録: js を使用して Excel の日付形式を変換する...

Node.js のワーカー スレッドの詳細な理解

目次概要Node.js における CPU バウンド アプリケーションの歴史CPUを集中的に使用する操...

Vue で HTML 5 ドラッグ アンド ドロップ API を使用する方法

ドラッグ アンド ドロップ API は、ドラッグ可能な要素を HTML に追加し、ドラッグ可能な豊富...

MySQL でのフィルター条件なしのカウントの詳細な説明

カウント(*)成し遂げる1. MyISAM: テーブル内の行の総数をディスク上に保存し、フィルタリン...

Linux に setup.py プログラムをインストールする方法

まず次のコマンドを実行します: [root@mini61 setuptools-8.2.1]# py...

HTML でナンバープレート番号と州の略語を入力するためのサンプルコード

原理としては、まずボタン付きの div を記述し、次に画面のサイズに応じて自動的に適応してキーボード...

JavaScript関数の詳細な説明これを指す問題

目次1.関数内のこの方向1. 通常の機能2. コンストラクター3. オブジェクトメソッド4. イベン...

ウェブサイトのコンテンツの100~1%はナビゲーションである

ウェブサイトでは、コンテンツの(100-1)%がナビゲーションです1. ジェシー・ジェームズ・ギャレ...