分享

urlencode和文本编码

 看见就非常 2012-09-04

电脑中一个字符大都用八位数的二进制数字表示,标准的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得到的结果就不一样。

  1. <%  
  2.      Response.Write(Server.URLpathencode("花心"))  
  3.      ' 得到 %BB%A8%D0%C4  
  4. %>  
上面是ANSI编码的文本,下面是UTF-8编码的代码文件,编码结果大不一样
  1. <%  
  2.      Response.Write(Server.URLEncode("花心"))  
  3.      ' 得到 %E8%8A%B1%E5%BF%83  
  4. %>  
同样针对ANSI编码的php脚本和UTF-8编码的脚本调用同样的函数也是不同结果

  1. <?php  
  2. echo urlencode("花心");  
  3. // %BB%A8%D0%C4  
  4. ?>  
  1. <?php  
  2. echo urlencode("花心");  
  3. // E8%8A%B1%E5%BF%83  
  4. ?>  
针对某种编码encode后的结果需要用同样编码的文本格式解码才可读,不然就是一堆乱码。所以我们在程序中最好做到编码统一,比如统一使用utf8这种全球通用包含各种语言文字的编码。

下面再看看ansi,unicode,unicode big endian,utf8编码的文件用十六进制打开的样子:同样的文本“a花心”

  1. ANSI                61  BB  A8  D0  C4   
  2. UNICODE             FF  FE  61  00  B1  82  C3  5F  
  3. UNICODE-BIG-ENDIAN  FE  FF  00  61  82  B1  5F  C3  
  4. UTF-8               EF  BB  BF  61  E8  8A  B1  E5  BF  83  

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多