zoukankan      html  css  js  c++  java
  • 前端编码问题汇总

    众所周知,字符的编码方式有两种惯例,一种是很古老ASCII码种语言子集的扩展,比如big5gb2312,分别是繁体字扩展和简体字扩展,两者互不兼容,与之类似的编码还有ISO系列,各个拉丁文的子编码集合也不相互兼容,这种编码的好处是编码集合很小,坏处是不能同时使用多种语言,于是就有了另一种编码惯例:“万国码”,全球所有语言做成一个码表,即unicode码 表,显然,这种编码的坏处是码表太庞大,好处是同时使用多种语言。所谓的utf-7、utf-8之类就是unicode的某种相对高效的实现,不管某个字 符用utf编码为几个字节,他们都属于同一个unicode超集。我们常遇到的中文编码是gb2312、gbk、gb18030和utf-8,不严谨的 讲,前三者大致相互兼容,但都和utf-8不兼容。

    浏览器如何发送一个带有中文的URL

    整个过程分两个阶段,1,发送URL请求,2,接收数据并呈现

    URL是一种编码“方法”,编码结果依赖于所采用的“码表”,即汉字的内码表示形式。所以,相同汉字有N多种URL编码结果,“淘宝”的utf8编码为“%E6%B7%98%E5%AE%9D”,gbk编码为“%CC%D4%B1%A6”。

    注:一个gb系编码的html页面中的form提交,表单中的中文编码会进行URL编码,但是以gbk格式作转码,utf8页面的form提交,以utf8格式作转码。

    浏览器如何以正确的编码渲染页面

    HTTP响应的数据起码有三个地方可以埋藏编码信息:

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

    浏览器可以从这三个地方获得HTTP响应报文的编码,此外还有两个因素,浏览器默认编码和操作系统语言类型。

    如果三者编码不一致,浏览器会首先读取http头中的content-type,若没有设定编码,再查找页面中meta标签中的charset设定,如果 还没有就以浏览器默认编码来显示,如果默认编码没有指定,浏览器会通过解析正文内容来判断编码。所以,页面是gbk编码,即便meta属性中设置 charset=utf-8,只要content-type中设定为gbk(或者GB2312、GB18030),该页面就正常显示,如果这时没有设定 content-type的编码,浏览器就会以meta中的charset属性为准,页面出现乱码

    js如何把字符串编码成gbk的

      问题由来:
             js引擎内码是unicode,所以通过encodeURI(str)进行URL编码的时候均属utf8编码
             所以在gbk编码的html中无法用js计算出gbk格式的URL编码,
             因此在ajax过程中也就无法用js来模拟gbk格式URL编码的数据提交
             "中文"两字的utf8 URL编码为:%E4%B8%AD%E6%96%87
             "中文"两字的gbk URL编码为:%D6%D0%CE%C4
             
      实现原理:
             一个gbk编码的html的表单提交时字段的URL编码是和页面编码保持一致的(gbk)
             所以这里用模拟表单提交的方法来获得gbk URL编码
             当然,前提必须是页面编码也必须为gbk

    原文地址:http://ued.taobao.com/blog/2011/08/26/encode-war/

  • 相关阅读:
    flash player over linux
    chmod 命令
    A*算法
    adb找不到设备
    ubuntu14.04安装wine以及国际版QQ
    linux man
    X-window
    linux file system
    linux command
    directUI
  • 原文地址:https://www.cnblogs.com/siqi/p/2763598.html
Copyright © 2011-2022 走看看