• 编码问题简单收集


    每一个二进制位(bit)有0和1两种状态,八个二进制位被称为一个字节(byte);因此一个字节可以组合出256个状态,即对应256个字符;
    ASCII:
    ASCII码一共规定了128个字符的编码;只占用了一个字节的后面7位,最前面的1位统一规定为0;
    GB2312:
    GB2312对ASCII简体字扩展;两个字节表示一个汉字,可以表示256x256=65536个符号。后更新出gbk,gb18030,即gb系列;
    big5:
    big5对ASCII繁体字扩展;
    Unicode:
    Unicode是一个很大的集合,现在的规模可以容纳100多万个符号,达到4个字节;太过庞大这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍。
    UTF-8:
    UTF-8是Unicode的实现方式之一;UTF-8它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
    ANSI:
    ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码


    URL编码:
    URL编码结果依赖你使用的”方法“,最终将URL转换为有效的ASCII字符格式。每一个非安全的ASCII字符都被替换为“%hh”格式,其中hh为两位十六进制数,它对应于该字符在ISO-8859-1字符集里的编码值。URL字符串里不能含有空格,在进行URL编码时,空格全部被替换为加号(+)。
    所以相同汉字有N多种URL编码结果,URL的utf8编码为3个字节对应一个汉字,gbk编码为两个字节对应一个汉字。
    1、网址路径的编码,用的是utf-8编码;
    2、参数的编码,用的是操作系统的默认编码(一般为utf-8)。
    3、GET和POST方法的编码,用的是网页的编码。
    4、在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。

    在javascript里的URL编码函数
    escape&unescape:
    javascript的Unicode编码&解码

    var unicode =  function(s){
        return s.replace(/[\u4E00-\u9FA5]/ig,function(w){
                return escape(w).toLowerCase().replace(/%/ig,'\\');
        });
    };
    

    encodeURI&decodeURI
    javascript的utf-8编码
    encodeURIComponent&decodeURIComponent
    javascript的utf-8编码,包括encodeURI编码字符;

    浏览器识别编码顺序是
    1,http头中的Content-Type
    2,html页面中的meta标签中指定charset
    3,页面正文数据(浏览器可以解析正文二进制码来判断编码)

    避免编码问题可以采取的方法
    1、使用js的encodeURI方法将汉字进行UTF-8的URL编码;服务器端再将其转码;
    php处理:
    iconv("UTF-8", "gbk", htmlspecialchars($__GET["name"], ENT_QUOTES));
    2、使用js的escape方法将汉字进行unicode编码;服务器端处理转码
    php:json_decode ( string $json [, bool $assoc ] );对 JSON 格式的字符串进行编码,返回json对象;可以针对unicode进行解码;



    详细参考:
    http://ued.taobao.com/blog/2011/08/26/encode-war/
    http://www.ruanyifeng.com/blog/2010/02/url_encoding.html
    http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

  • 相关阅读:
    BZOJ 4802 欧拉函数(Pollard_Rho)
    Codeforces 804E The same permutation(构造)
    Codeforces 804D Expected diameter of a tree(树形DP+期望)
    BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
    BZOJ 2430 [Poi2003]Chocolate(贪心+归并排序)
    BZOJ 1707 [Usaco2007 Nov]tanning分配防晒霜(扫描线+贪心+优先队列)
    BZOJ 1828 [Usaco2010 Mar]balloc 农场分配(贪心+线段树)
    BZOJ 1827 [Usaco2010 Mar]gather 奶牛大集会(树形DP)
    BZOJ 2697 特技飞行(贪心)
    BZOJ 4883 [Lydsy2017年5月月赛]棋盘上的守卫(最小生成环套树森林)
  • 原文地址:https://www.cnblogs.com/cheche/p/2158398.html
Copyright © 2020-2023  润新知