urlencode和文本编码

电脑中一个字符大都用八位数的二进制数字表示,标准的ANSI编码规范规定0~127总共128个数字代表信息(字母,数字,标点,控制码,空格等),剩下没用到的128个编码没用做规定,不同国家地区制定了不同的标准,由此产生了GB2312,BIG5以及JIS等各自的编码标准。这些使用 2 个字节(0x80~0xFF范围内)来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

ISO-8859-1(2,3...)是欧美以及拉丁地区的编码方式,通过使用剩下的128位来扩充自己国家语言的编码

事实证明,对可以用ASCII表示的字符使用UNICODE并不高效,因为UNICODE比ASCII占用大一倍的空间

我们通过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后的结果需要用同样编码的文本格式解码才可读,不然就是一堆乱码。所以我们在程序中最好做到编码统一,比如统一使用utf8这种全球通用包含各种语言文字的编码。

下面再看看ansi,unicode,unicode big endian,utf8编码的文件用十六进制打开的样子:同样的文本“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

可以看出第一种编码方式全部都是文本信息,后面三种都有头部表示自己的信息,所以ANSI中也没有用FE FF来编码的汉字(为了不冲突)UNICODE中对字母的编码也是采用了2个字符,增加了冗余。我们比较ANSI和UTF-8编码的格式,可以看到正好就是我们urlencode后的结果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值