JavaScript文字セットの符号化と復号についての詳細
1879 ワード
一、文字セット
1)文字とバイト(Charcter)
文字は文字化けを含む各種の文字と記号の総称である。1文字は1〜nバイトに対応し、1バイトは8ビットに対応し、それぞれ0または1で表します。
2)文字セット(Charcter Set)
文字セットは複数の文字のセットであり、各文字セットに含まれる文字の個数は異なり、共通の文字セット名はASCII文字セット、GB 2312文字セット、ユニックode文字セットなどである。
3)文字セットコード(Charcter Enccoding)
文字セットコードとは、記号をコンピュータ読み取り可能なバイナリに変換することであり、復号とは、バイナリを人間の読み取り可能なシンボルに変換することである。
文字セットは、多くの符号化方式(例えば、GBK対応GBK符号化)に対応するが、Unicode符号化は、UTF-8、UTF-16、UTF-32、UTF-7を含む様々な種類がある。
現在のウェブページで一番多く使われているのは「UTF-8」です。UTF-8は1バイトから4バイトを使って各文字コードを作ります。ASCIIの1つのオーバーセットですので、既存のASCIIテキストは変換する必要がありません。
二、ブラウザ進制
1)HTML属性には10進数と16進数が使われています。
十進法はHTMLでは「&啣56」を使用できます。十六進法では、「&钻x 5 a」を使います。10進数よりxが多くなり、進数コードにもa~fの6文字が10~15を表します。
2)CSS属性では10進数と16進数を使用します。
CSSはHTMLの進数に対応していますが、これ以外にも16進数は「\6 c」という形式で表現できます。
3)JavaScript符号化パッケージ
evalによって直接文字列8進と16進の2つの符号化方式を実行することができます。8進は\56で表され、16進は\x5 cで表されます。
コードに漢字が適用されていて、入力コードが必要な場合は、16進のユニックコードしかできません。表示形式は「\u 4 ee 3\u 7801」です。
「Webフロントエンドハッカー技術の公開」では、コーディングとデコードのために二つの方法をカプセル化しました。
コアコードは、「str.charCodeAt.toString」と「String.from CharCode」です。
charCodeAt()方法は、与えられたインデックスにおけるUTF-16コードユニットを表す0から65535までの整数を返します。
静的String.from CharCode()メソッドは、指定されたUnicoode値シーケンスを用いて作成された文字列を返す。
また、一つのオンラインページを通じて符号化復号「MonyerJS」を行うこともできます。
4)HTML自動復号機構
例えば、ウェブページに16進数の「?钠x 0048」と入力します。x 0065;x 006 c;x 006 c;x 006 f;」自動的に「ハロー」と復号されます。
よく知っているスペースがあります。このような仕組みです。
三、ブラウザコード
JavaScriptの中には3つのペアが文字列を復号できる関数があります。それぞれ:
エスケープ/unescape、encodeURI/decodeURI、encodeURIComponent/decodeURIComponent。
主な違いはやはり符号化しない文字の個数です。
1)エスケープがエンコードされていない文字は69文字あります。
2)エンコーディングしない文字は82文字あります。
1)文字とバイト(Charcter)
文字は文字化けを含む各種の文字と記号の総称である。1文字は1〜nバイトに対応し、1バイトは8ビットに対応し、それぞれ0または1で表します。
2)文字セット(Charcter Set)
文字セットは複数の文字のセットであり、各文字セットに含まれる文字の個数は異なり、共通の文字セット名はASCII文字セット、GB 2312文字セット、ユニックode文字セットなどである。
3)文字セットコード(Charcter Enccoding)
文字セットコードとは、記号をコンピュータ読み取り可能なバイナリに変換することであり、復号とは、バイナリを人間の読み取り可能なシンボルに変換することである。
文字セットは、多くの符号化方式(例えば、GBK対応GBK符号化)に対応するが、Unicode符号化は、UTF-8、UTF-16、UTF-32、UTF-7を含む様々な種類がある。
現在のウェブページで一番多く使われているのは「UTF-8」です。UTF-8は1バイトから4バイトを使って各文字コードを作ります。ASCIIの1つのオーバーセットですので、既存のASCIIテキストは変換する必要がありません。
二、ブラウザ進制
1)HTML属性には10進数と16進数が使われています。
十進法はHTMLでは「&啣56」を使用できます。十六進法では、「&钻x 5 a」を使います。10進数よりxが多くなり、進数コードにもa~fの6文字が10~15を表します。
2)CSS属性では10進数と16進数を使用します。
CSSはHTMLの進数に対応していますが、これ以外にも16進数は「\6 c」という形式で表現できます。
3)JavaScript符号化パッケージ
evalによって直接文字列8進と16進の2つの符号化方式を実行することができます。8進は\56で表され、16進は\x5 cで表されます。
コードに漢字が適用されていて、入力コードが必要な場合は、16進のユニックコードしかできません。表示形式は「\u 4 ee 3\u 7801」です。
「Webフロントエンドハッカー技術の公開」では、コーディングとデコードのために二つの方法をカプセル化しました。
コアコードは、「str.charCodeAt.toString」と「String.from CharCode」です。
charCodeAt()方法は、与えられたインデックスにおけるUTF-16コードユニットを表す0から65535までの整数を返します。
静的String.from CharCode()メソッドは、指定されたUnicoode値シーケンスを用いて作成された文字列を返す。
また、一つのオンラインページを通じて符号化復号「MonyerJS」を行うこともできます。
4)HTML自動復号機構
例えば、ウェブページに16進数の「?钠x 0048」と入力します。x 0065;x 006 c;x 006 c;x 006 f;」自動的に「ハロー」と復号されます。
よく知っているスペースがあります。このような仕組みです。
三、ブラウザコード
JavaScriptの中には3つのペアが文字列を復号できる関数があります。それぞれ:
エスケープ/unescape、encodeURI/decodeURI、encodeURIComponent/decodeURIComponent。
主な違いはやはり符号化しない文字の個数です。
1)エスケープがエンコードされていない文字は69文字あります。
*、+、-、.、/、@、_、0~9、a~z、A~Z
そしてescapeは0~255以外のunicode値を符号化するときに%u****フォーマットを出力します。2)エンコーディングしない文字は82文字あります。
!、#、$、&、'、(、)、*、+、,、-、.、/、:、;、=、?、@、_、~、0~9、a~z、A~Z
3)エンコーディングされていない文字は71文字あります。!、'、(、)、*、-、.、_、~、0~9、a~z、A~Z