关于编码

因为浏览器和操作系统各自不同,导致字符串的默认编码方式各有不同。表单、URL、ajax中含汉语或者其他语言时出现乱码的原因就是不同的编码导致。

解决该问题的最简单的方法是用JavaScript先对URL进行编码在提交到服务器,这样浏览器不会对此再次编码。

下面将介绍JavaScript和asp.net的编码和解码。

JavaScript:

    Window.escape(str);        字符串编码成Unicode编码。

    Window.unescape(str);    Unicode编码解码成字符。

        规则是:除了ASCII字母、数字、标点符号"@*_+-./"意外的字符进行编码。因为它不对"+"进行编码,所以不建议用该编码方式。

    格式:

    Window.encodeURI(str);    字符串编码成utf-8编码。

    Window.decodeURI(str);    utf-8编码解码成字符。

        规则是:除了ASCII字母、数字、标点符号";/?:@&=+$,#"意外的字符进行编码。

    格式:

    Window.encodeURIComponent(str);    字符串编码成utf-8编码。

    Window.decodeURIComponent(str);    utf-8编码解码成字符串。

        规则是:跟encodeURI一样,但它会对";/?:@&=+$,#"等符号进行编码。

    格式:

ASP.NET:

    HttpUtility.UrlEncode(str);        字符串编码成utf-8编码。

HttpUtility.UrlDecode(str);        utf-8编码解码成字符串。

        规则是:js的encodeURIComponent(str)/decodeURIComponent(str)编码/解码函数规则一样,并会把空格编码成"+"符号。

编码种类:

    ASCII:从00000000到01111111的八个二进制,共有128种不同状态,被称为字节(byte),最前面一位规定0。

    GB2312:简体中文常见的编码方式,两个字节表示一个汉字,最多可以表示65536个符号。

    Unicode:他有UCS-2和UCS-4规范。UCS-2是用两个字节表示,共有65536个状态。UCS-4是用4个字节表示,共有4,294,967,296个状态。目前普遍采用的市UCS-2。

    Utf-8:是Unicode的一种实现方式,还包括utf-16和utf-32。特点:他是一种变长的编码方式。

        Utf-8规则:

        单字节第一位规定0,后面7位是Unicode码,随意utf-8和ASCII码是相同的。

        一个字符有n字节,则在第一个字节前n位设为1,n+1设为0,其后字节的前两位设为'10'。假设一个字符有4个字节,则这四个字节的"壳"是1111 0xxx,10xx xxxx,10xx xxxx,10xx xxxx。再把该字符转换成二进制,补到x位置,从后往前补。所以utf-8一个字符最大可占7个byte(字节)。最后这四个字节转换成十六进制(8个字符)。

        decodeURIComponent(str)就是每个字节前加了"%"符号的16进制。

    

Unicode:文件开头FF FE 表明little endian格式编码,字符从后往前编码,FF FE 4E 25 实际上是25 4E。

Unicode big endian:文件开头FE FF,从前往后编码。

Utf-8:文件开头EF BB BF,从前往后编码。

注:文件开头说明该文件的编码类型!

 

如果有错别地方请大师指出来哦, O(∩_∩)O谢谢!

 

本文章参考:

    http://blog.csdn.net/lvxiangan/article/details/8151670

    http://baike.baidu.com/link?url=DXrQvbWVi8hU2KURCs8tK_iCCiXyIuU5Dwue0btWIHJHCdO0XsYiExmb9T5hgwqA9k0_DkBDS_-fuS7hElkQb_

    http://www.blogjava.net/Hopes/articles/385744.html

将来的你,一定会感谢现在拼命努力的你!
原文地址:https://www.cnblogs.com/hugjil/p/6045340.html