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

推薦する

MySQL無料インストール版のパスワードの設定と変更に関するチュートリアル

ステップ 1: 環境変数を構成する (解凍パス: G:\mysql\mysql-5.7.21-win...

JavaScript で右クリック メニューを統合する layim のサンプル コード

目次1. 効果の実証2. 実装チュートリアル3. 最後に、完全なコードを添付します4. その他の右ク...

Web デザイン ヘルプ: Web フォント サイズ データ リファレンス

<br />内容はインターネットから転載したものです。どこから見つけたのか忘れてしまいま...

JavaScript スネーク実装コード

この記事の例では、参考までに貪欲なスネークを実装するためのJavaScriptの具体的なコードを共有...

Windows Server2014 にセキュリティを適用して MySQL をインストールする際のエラーに対する完璧な解決策

理由はインストール後にきちんとアンインストールされなかったためです。この問題を解決するには、次の点に...

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

最近、 Three.jsでReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構...

Django+mysql の設定と簡単な操作データベースのサンプルコード

ステップ1: MySQLドライバをダウンロードするcmdは作成されたDjangoプロジェクトディレク...

Nginx を使用してポート転送 TCP プロキシを実装する例

目次需要背景Nginx を使用する理由は何ですか? Nginx によるポート転送依存関係をインストー...

いくつかの面接の質問を使ってJavaScriptの実行メカニズムを調べる

目次前の単語同期と非同期前菜プレートを追加マクロタスク マイクロタスク約束しましょうタイマーを追加す...

Vue はネストされたルーティングメソッドの例を実装します

1. ネストされたルーティングはサブルーティングとも呼ばれます。実際のアプリケーションでは、通常、ネ...

Azure Container Registry を使用してイメージを保存する際の問題

Azure Container Registry は、Docker Registry 2.0 仕様に...

IE6 フォントを定義できません: 13px サイズは無効です。IE6 は自動的に大きいフォント ソリューションを表示します。

数日前、Web ページのモジュールを調整していたとき、ページのフォント サイズを 13px に設定し...

nginxフロー制御とアクセス制御の実装

nginx トラフィック制御レート制限は非常に便利ですが、Nginx では誤解され、誤って設定される...

CSS3のvar()を使用して実行時にscss変数の値を変更する詳細な説明

var() の紹介と使用法詳細 (MDN) IEは無効ですが、他の主流のブラウザは有効ですvar()...

Linuxにgitをインストールする方法

1. はじめにGit は、規模の大小を問わずあらゆるプロジェクトを俊敏かつ効率的に処理するために使用...