urlencodeとテキスト符号化

1780 ワード

パソコンの文字の多くは8桁の2進数で表示され、標準のANSI符号化仕様では0~127の計128個の数字代表情報(アルファベット、数字、句読点、制御コード、スペースなど)が規定されており、残りの128個の符号化は規定されておらず、国によって異なる基準が制定され、GB 2312、BIG 5、JISなどのそれぞれの符号化基準が生まれた.これらは2バイト(0 x 80~0 xFFの範囲内)を用いて1文字を表す各種漢字延伸符号化方式であり、ANSI符号化と呼ばれる.簡体字中国語システムでは、ANSI符号化はGB 2312符号化を表し、日本語オペレーティングシステムでは、ANSI符号化はJIS符号化を表す.異なるANSI符号化は互いに互換性がなく、情報が国際的に交流している場合、2つの言語に属する文字を同じANSI符号化のテキストに格納することはできない.
ISO-8859-1(2,3...)欧米およびラテン地域の符号化方式であり、残りの128ビットを用いることで自国言語の符号化を拡充する
事実は、ASCIIで表すことができる文字に対してUNICコードを使うのは効率的ではないことを証明して、UNICコードがASCIIより1倍大きい空間を占有するためです
私たちはUrlEncode関数で漢字の符号化を得ることができます.例えば、ANSI符号化のaspコードと、UTF-8符号化のaspコードにurlecodeを実行した結果は違います.
<%
	 Response.Write(Server.URLpathencode(" "))
	 '   %BB%A8%D0%C4
%>

上はANSI符号化のテキスト、下はUTF-8符号化のコードファイルで、符号化結果は大きく異なります
<%
	 Response.Write(Server.URLEncode(" "))
	 '   %E8%8A%B1%E5%BF%83
%>

同様にANSI符号化のphpスクリプトとUTF-8符号化のスクリプトに対して同様の関数を呼び出すのも異なる結果である
<?php
echo urlencode(" ");
// %BB%A8%D0%C4
?>
<?php
echo urlencode(" ");
// E8%8A%B1%E5%BF%83
?>

ある種のencodeを符号化した結果に対して、同じ符号化されたテキストフォーマットで復号する必要があります.そうしないと、文字化けしてしまいます.したがって、utf 8という世界共通の様々な言語文字を含む符号化を統一的に使用するなど、プログラムの中で符号化を統一することが望ましい.
次にansi,unicode,unicode big endian,utf 8符号化ファイルを16進数で開く様子を見てみましょう.同じテキスト「a花心」
ANSI				61	BB	A8	D0	C4 
UNICODE				FF	FE	61	00	B1	82	C3	5F
UNICODE-BIG-ENDIAN	FE	FF	00	61	82	B1	5F	C3
UTF-8				EF	BB	BF	61	E8	8A	B1	E5	BF	83

1つ目の符号化方式はすべてテキスト情報であり、後の3つには頭で自分を表す情報があることから、ANSIでもFE FFで符号化されていない漢字(衝突しないように)UNICODでもアルファベットの符号化に2文字を採用し、冗長性を増していることがわかる.ANSIとUTF-8符号化のフォーマットを比較すると,urlencode後の結果がちょうど見られる.