精华内容
下载资源
问答
  • 编码和解码

    千次阅读 2019-04-20 20:34:37
    编码:将字符转为字节序列(abcdefg-------------> 0101010100101010010) 解码:将字节序列转为字符(10010101010100010010110------> abcdefg) 一个web项目中的编解码历程 这个是个简单的场景:中间的...

    概念

    字符的三种形态
    字符的三种形态

    图片来自:https://zhuanlan.zhihu.com/p/25435644

    编码:将字符转为字节序列(abcdefg-------------> 0101010…10010)
    解码:将字节序列转为字符(1001010…10010110------> abcdefg)

    各种编码

    ASCII编码

    计算机,它只认识0和1,也就是高低电平。于是想让计算机识别我们人类的语言,也就是字符,则需要一个对应关系。由于计算机在美国诞生,于是美国给了一个对应关系表,称为ASCII编码
    在这里插入图片描述

    各个国家的编码

    各个国家为了使用计算机,也需要本国的语言符号被计算机识别,于是各种编码层出不穷:中国有GBK,日本有EUC-JP,韩国有EUC-KR,甚至一个国家也不只有一种编码,比如中国繁体还有big5等等。总之就是,每个国家为了让计算机认识自己国家的文字,都出了许多对应的编码。

    统一编码

    每个国家都制定了自己的编码,每个网站都可以在自己的国家运行良好。但互联网是让全世界连成了一体,当本国发出的信息走向国际时,多语言环境让每一种编码都措手不及。于是出现了unicode编码。

    Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得计算机可以用更为简单的方式来呈现和处理文字。

    Unicode伴随着通用字符集的标准而发展,同时也以《The Unicode Standard》书本的形式对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。当前最新的版本为2019年3月5日公布的12.0.0[2],已经收录超过13万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的数据除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。 ——维基百科

    说白了,unicode编码就是收录了全世界的所有字符,统一进行编码。也就是给每一个形状赋予一个数字,这是它的编码方式,但是怎么实现的呢?
    Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的(也就是说,字符对应的数字是确定的)。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同(也就是说,这个数字用几个字节来存有所不同)。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。比如UTF-8、UTF-16等。可以简单理解,unicode是一个字符集,utf8等是这个字符集的不同编码规则实现。

    从mysql中读取数据的编解码历程

    这个是个简单的场景:中间的服务器中跑了一个javaweb项目,他把mysql中的数据拿出来,然后交给前端展示。
    首先数据库中已经有了数据,比如我们存了一句话“i am tian 峰”。mysql中的数据说到底还是一种特殊文件,并且是以二进制补码的形式存在磁盘上。换句话说,就是一串有规律的0101。当我们向数据库发起查询请求之后,mysql首先得将需要查的这串0101读取出来,然后进行编码转换(有一个参数叫character_set_results指明了返回数据的编码),再发送给java后台,我们收到这串0101之后,将它转发给前端浏览器,浏览器采用指定的编码进行解码,得到对应的数字,然后对照字符集合,将字符图形展示出来。
    说一个下这个简单项目的各个编码参数:

    • 平台:windows(默认编码GBK)
    • mysql:utf-8
    • 浏览器页面:utf-8

    当我们通过jdbc完成查询,得到ResultSet之后就可以进行数据的处理了。此时ResultSet中的数据不只有数据,还有此数据的编码类型。我们就可以进行数据的处理了。

    在这里插入图片描述
    图中我标出了三个箭头,分别指向A、B、X三行。先说一下结果:如果我们注释掉A行,使用B和X,那么浏览器将正常显示中文字符;如果注释掉B行,使用A和X,那么浏览器将出现乱码。X行就是将buffer中的字节数组返回给http客户端(浏览器),A行是将字符串ss转换为自己数组放入buffer中,ss是从set中get到的。get的过程就是一个解码的过程,set中本来是mysql返回的经过utf-8编码得到的字节数组,ss就是通过解码得到的对应字符串。这里解码时使用的编码是resultSet指定的,也就是mysql服务端指定的,于是可以很顺畅的得到一个正常的字符串。但是A行又要将这个字符串进行编码,得到字节数据,这里采用的编码还是服务端指定的吗?可惜不是了,他会采用平台默认的编码,就是GBK。对与中文来说,GBK存储中文使用两个字节,而UTF-8使用三个。但是也没啥,不过就是采用新的编码,由UTF-8转到了GBK,但是不巧的是,上边说了,浏览器使用的是utf-8。当浏览器采用utf-8去解码gbk编码产生的字节数时,发现自己并不认识这个字节序列。于是出现了乱码,但此时,只要我们将浏览器页面编码改为gbk(html页面中可以设置字符编码),立刻就恢复了正常。

    展开全文
  • java对URL进行编码和解码

    万次阅读 2018-09-19 10:14:35
    编码 URLEncoder.encode( URL, "UTF-8" ) 解码 URLDecoder.decode( URL, "UTF-8" ) (小提示: cookie中存放中文也需要使用上面的方法进行编码和解码)
    • 编码
    URLEncoder.encode( URL, "UTF-8" )
    • 解码
    URLDecoder.decode( URL, "UTF-8" )

    (小提示: cookie中存放中文也需要使用上面的方法进行编码和解码)

     

    -------------------------------------------------- 懒懒的分隔线 --------------------------------------------------

    自己玩玩 ,随便看看

    pygou.com

    展开全文
  • C++URL编码和解码

    2013-07-16 16:50:50
    C++URL编码和解码
  • MATLAB实现jpeg编码和解码,包括编码DCT,哈夫曼编码,熵编码
  • Python url编码和解码

    千次阅读 2019-08-16 13:21:38
    Python怎么对url进行编码和解码? 导入模块 编码 解码 引题 我们上网的时候经常见到url中会有%25E6,这样有%号的字符,下面是51job的链接: https://search.51job.com/list/020000,000000,0000,00,9,99,%25E6%...

     

    目录

    引题

    url编码有什么作用?

    Python怎么对url进行编码和解码?

    导入模块

    编码

    解码


    引题

    我们上网的时候经常见到url中会有%25E6,这样有%号的字符,下面是51job的链接:

    https://search.51job.com/list/020000,000000,0000,00,9,99,%25E6%25B7%25B1%25E5%25BA%25A6%25E5%25AD%25A6%25E4%25B9%25A0,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=

     

    %25E6%25B7%25B1%25E5%25BA%25A6%25E5%25AD%25A6%25E4%25B9%25A0

    是我搜索的关键字“深度学习”,这是url编码两次后的结果。

    通过在线url解码试试看解码的结果,我用的在线解码网址:https://www.sojson.com/encodeurl.html

    1、第一次解码,得到的结果是%后面加两个字符

    2、第二次解码,得到的就是正常的中文了。

    一般的,url编码后的规律:

    编码一次,%号后面加两个字符;

    编码二次,%号后面加四个字符;

    编码三次,%号后面加六个字符。

     

    url编码有什么作用?

    如果你搜索的关键词是“深度学习&机器学习”,中间有个url的特殊字符&,那么服务器收到这个get请求的时候就会出错,不知道如何去解析请求带的参数了,所以需要把这一整块进行编码。编码一次得到的结果是%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0&%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0,就已经没有特殊字符&,这样请求就没有问题,服务器拿到这个参数进行解码就能正常解析得到想要的参数。

     

    Python怎么对url进行编码和解码?

     

    导入模块

    import urllib.parse

    编码

    urllib.parse.quote(),对字符串进行url编码
    import urllib.parse
    kw="机器学习"
    kw1=urllib.parse.quote(kw)
    print(kw1)
    kw2=urllib.parse.quote(kw1)
    print(kw2)
    kw3=urllib.parse.quote(kw2)
    print(kw3)

    输出结果:

    %E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0
    %25E6%259C%25BA%25E5%2599%25A8%25E5%25AD%25A6%25E4%25B9%25A0
    %2525E6%25259C%2525BA%2525E5%252599%2525A8%2525E5%2525AD%2525A6%2525E4%2525B9%2525A0

    解码

    urllib.parse.unquote() ,对字符串进行url解码
    import urllib.parse
    kw="机器学习"
    # 编码
    kw1=urllib.parse.quote(kw)
    print(kw1)
    kw2=urllib.parse.quote(kw1)
    print(kw2)
    kw3=urllib.parse.quote(kw2)
    print(kw3)
    
    # 解码
    ym2=urllib.parse.unquote(kw3)
    print(ym2)
    ym1=urllib.parse.unquote(ym2)
    print(ym1)
    ym=urllib.parse.unquote(ym1)
    print(ym)

    输出结果:

    # 编码开始
    %E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0
    %25E6%259C%25BA%25E5%2599%25A8%25E5%25AD%25A6%25E4%25B9%25A0
    %2525E6%25259C%2525BA%2525E5%252599%2525A8%2525E5%2525AD%2525A6%2525E4%2525B9%2525A0
    
    # 解码开始
    %25E6%259C%25BA%25E5%2599%25A8%25E5%25AD%25A6%25E4%25B9%25A0
    %E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0
    机器学习

    最后得到我们的最原始的字符串!

     

     

     

     

     

     

    展开全文
  • base64编码和解码

    千次阅读 2019-04-26 21:20:04
    base64编码和解码 原理 计算机中,每个字节是8位的二进制数 base64编码中,每一个8位的二进制数中只有后6位时有效字节,其他用0填充。 正常编码转成base64编码,满足3 * 8 = 24 = 4 * 6。即每3个字节的正常...

    base64编码和解码

    • 原理
      1. 计算机中,每个字节是8位的二进制数
      2. base64编码中,每一个8位的二进制数中只有后6位时有效字节,其他用0填充。
      3. 正常编码转成base64编码,满足3 * 8 = 24 = 4 * 6。即每3个字节的正常编码可以转成由4个字节组成的正常编码。
    • base64编码表 base64_001

    编码图解:(参考维基百科)

    • 3位的字节转成4位的base64字节
      base64_002
    • 2位的字节转成4位的base64字节,注意:补等号=
      base64_003
    • 1位的字节转成4位的base64字节,注意:补等号
      base64_004

    简单代码实现Python例子

    def xdd_base64():
        """
        base64,编码和解码
        :return:
        """
        strbase64 = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
        dictbase64 = {k:i for i,k in enumerate(strbase64)}
        dictbase64[b"="[0]] = 0
        def base64Encode(stt:str)->bytes:# 编码
            """
                base64 编码,将字符串转成 base64格式的字符串
            :param stt:
            :return:
            """
            bstt = stt.encode(encoding="utf-8")
            # print(bstt,"====")
            k = 0
            count = len(bstt)
            barr = bytearray()
            for i in range(3,count,3):  #3*8=4*6
                units = bstt[k:i]
                barr.extend(getBytearry(units))
                k = i
            else:
                if k<count: #最后字节数不够3个字节。补0
                    num = k-count+3
                    endunits = bstt[k:] +b"\x00"*num #长度不够补0
                    barr.extend(getBytearry(endunits))
                    if num : barr[-num:] = b"=" * num  #末尾补等号
    
                    # print(endunits)
            return bytes(barr)
    
        def getBytearry(nuits:bytes)->bytearray:
            """
            将3个8位的字节,转成4个6位的字节
            :param nuits:
            :return:
            """
            barr = []
            barrint = int.from_bytes(nuits,'big')
            for i in range(18,-1,-6):
                # 注意0x3F是16精制数,对应二精制数是11 1111 对应10进制数是63,与6个1的二进制数做与运算,相当于支取最后6个二进制数
                barr.append(strbase64[barrint>>i if i==18 else barrint>>i & 0x3F])
            return barr
    
        def base64Decode(stt:bytes)->bytes: #解码
            strarr = (stt[i-4:i] for i in range(4,len(stt)+1,4))
            arrby = bytearray()
            num = 0
            for nuits in strarr:
                rint = 0
                for k in nuits:
                    if k == b"="[0]: num +=1 #统计尾部等号个数
                    rint = (rint << 6) + dictbase64[k]
                arrby.extend(rint.to_bytes(3,"big"))
            while num: #去除尾部0字符
                arrby.pop()
                num -= 1
            return bytes(arrby)
    
        xdd_base64.encode = base64Encode
        xdd_base64.decode = base64Decode
        return xdd_base64
    
    • 调用验证:
    import base64
    stt = ["a","`",'ab','abc','abcd','ManMa',"教育a"]
    for s in stt:
        xddbase = xdd_base64()
        destr = xddbase.encode(s)
        sysb64 = base64.b64encode(s.encode())
        print("base64编码:\t{}\t\t系統base64:\t{}".format(destr,sysb64))
        enstr = xddbase.decode(destr)
        print("base64解码:\t{}\t\t系統base64:\t{}".format(enstr,base64.b64decode(sysb64)))
        print()
    

    base64_005

    java实现base64编码:

    package com.gdy.wts;
    import java.util.Base64;
    
    public class text3 {
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		String[] text = {"a","`","ab","abc","abcd"};
    		for(String str :text){
    			byte[] sysencode = Base64.getEncoder().encode(str.getBytes());
    			System.out.println("系統base64编码为:\t"+ new String(sysencode));
    			System.out.println("base64encode编码为:\t"+ new String(base64Encode(str)));
    		}
    		
    	}
    	private static final char[] toBase64 = {
                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
                'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
                'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
                'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
        };
    	
    	/**
    	 * base64编码
    	 * @param str 需要编码的字符串
    	 * @return byte[] base64编码 
    	 */
    	public static byte[] base64Encode(String str){
    		
    		byte[] bstr = str.getBytes();
    		int mo = bstr.length%3;
    		byte[] b64 = new byte[(mo==0?str.length()/3:str.length()/3+1)*4];
    		int b64index = 0;
    		int i=2;
    		for(;i<bstr.length;i+=3){
    			int temp = bstr[i-2]<<16 | bstr[i-1]<<8 | bstr[i];
    			b64[b64index++] = (byte)toBase64[ temp>>18];
    			b64[b64index++] = (byte)toBase64[ (temp>>12) & 0x3f];
    			b64[b64index++] = (byte)toBase64[ (temp>>6) & 0x3f];
    			b64[b64index++] = (byte)toBase64[temp & 0x3f];
    		}
    		if(mo!=0){
    			int temp = 0;
    			//补0
    			for(int k=1;k<=mo;k++){
    				temp |= bstr[i-3+k]<<(8*(3-k));
    			}
    			b64[b64index++] = (byte)toBase64[ temp>>18];
    			b64[b64index++] = (byte)toBase64[ (temp>>12) & 0x3f];
    			b64[b64index++] = (byte)toBase64[ (temp>>6) & 0x3f];
    			b64[b64index++] = (byte)toBase64[temp & 0x3f];
    			//替换等号
    			for(int k=1;k<=3-mo;k++){
    				b64[b64.length-k] = '=';
    			}
    		}
    		return b64;
    	}
    
    }
    
    • 运行结果如下:
      base64_006
    展开全文
  • Android音频视频硬编码和解码_MediaCodec,采用系统自带的编码和解码器MediaCodec,研究中遇到很多坑,在此记录下来,方便自己朋友们查看。
  • PYTHON编码和解码

    千次阅读 2018-10-21 14:04:40
    从第一天接触Python就对解码和编码的问题很困惑,最近在学习网络数据爬虫,又遇到了一系列的解码和编码问题,处理中文编码问题真的好麻烦,这次真的需要好好填坑了。 详细内容下面的文章: Python字符串的编码与解码...
  • Java编码和解码Unicode

    万次阅读 2018-03-13 15:09:54
    Java编码和解码Unicode
  • 一个用c实现的7bit编码和解码,在短息编解码中比较有用。
  • QR编码和解码源代码

    热门讨论 2011-11-10 00:01:40
    QR编码和解码的源代码,用于对二维码的编码生成和解码
  • 在之前的系列文章中,我们提到了netty中的channel只接受ByteBuf类型的对象,如果不是ByteBuf对象的话,需要用编码和解码器对其进行转换,今天来聊一下netty自定义的编码和解码器实现中需要注意的问题。
  • matlab实现卷积码编码和解码

    热门讨论 2013-07-22 19:45:26
    matlab实现卷积码编码和解码,viterbi维特比译码
  • Android Base64对图片进行编码和解码
  • JDK1.71.8Base64编码和解码的坑

    千次阅读 2020-06-18 16:10:35
    JDK1.61.7里对Base64编码和解码使用的是BASE64Decoder(),而JDK1.8API里添加了Base64,JDK1.8编码和解码时不用考虑内容的换行符,而JDK1.61.7需要考虑编码和解码内容里的换行符。 JDK1.61.7编码和解码: ...
  • java字符串编码和解码

    千次阅读 2019-04-22 21:48:13
    java字符串编码和解码 万变不离其宗,只要保证编码方式和解码方式统一,你就不可能出现乱码。 getBytes() 编码 new String(byte[], decode) 解码 与getBytes()相对的,通过new String(byte[], decode)的方式来还原。...
  • url在线编码和解码

    千次阅读 2013-10-17 11:29:37
    今天在网上搜了一下对url在线编码和解码的网站。对我来说,使用起来很方便。而且这个网站里面,不仅仅有对url的编码和解码,还有很多实用的功能。 分享给大家: 网址:...
  • 用Python来实现Base64编码和解码

    千次阅读 2019-06-07 11:23:41
    用Python来实现Base64编码和解码用Python来实现Base64编码和解码Base64编码Python代码实现Base64解码总代吗 用Python来实现Base64编码和解码 Base64是一种常见的编码和解码方式,Base64用7 bits的可打印字符来表示8-...
  • 使用Python进行Base64编码和解码

    千次阅读 2020-06-11 01:54:10
    假设您有一个要通过网络传输的二进制映像文件。... 在本文中,我将向您展示如何使用Python编码和解码二进制图像。 该程序被图示为一个独立的本地程序,但是您可以将该概念应用于其他应用程序,例如将...
  • Java实现的URL编码和解码技术

    万次阅读 2017-04-06 11:23:33
    当编写 “ 网络爬虫” 或下载器时,在 Java 中实现 URL 编码和解码是一个很常见的要求。本文的重点是创建用于对所传递的 URL 进行编码和解码的模块。 Main 方法public static void main(String[] args) { // ...
  • Java Base64编码和解码

    热门讨论 2008-12-20 04:04:31
    Java编写的Base64编码和解码程序,支持中文。
  • 自己用java实现的Base64编码和解码,支持自定义字母表,文章地址http://blog.csdn.net/zzhouqianq/article/details/46992347
  • 编码和解码、调制与解调

    万次阅读 多人点赞 2015-04-15 22:46:21
    通信系统中为什么要进行编码和解码?常见的编码方式有哪些?通信系统中为什么要进行调制与解调?调制的分类方法有哪些?
  • 网上很多哈夫曼源代码要不是复制,要不是对文件操作,无法对内存缓冲区使用。自己写了一个c++类封装的,接口简洁,方便使用,提供对缓冲区内存的编码和解码,测试可行。但编码和解码时间较长,以后改进。
  • 使用ES6语法进行Base64的编码和解码

    千次阅读 2017-12-08 01:09:35
    使用ES6语法进行Base64的编码和解码
  • RLP编码和解码

    万次阅读 2017-11-24 22:49:07
    GitHub上英文介绍(解码部分为本人所编辑):https://github.com/ethereum/wiki/wiki/RLP RLP(Recursive Length Prefix,递归的长度前缀)是一种编码规则,可用于编码任意嵌套的二进制数组数据。RLP编码的结果也是...
  • 对字符串进行哈夫曼编码和解码

    千次阅读 2019-01-30 10:41:03
    通过查询文件中的字符以及各个字符的权值(出现次数),对某个字符串进行哈夫曼编码和解码,比如 文件中字符权值如下: A 10  B 15 C 12 D 21 E 25 F 50 代码则会通过生成哈夫曼二叉树计算出各个字符的编码,...
  • H265编码和解码源码

    2017-03-03 23:55:55
    德国公司 Stuttgarter Struktur AG发布的H.265编解码器的开源实现——libde265,,libde265采用C语言编写,其API很容易整合到其它软件中。libde265还在开发之中,功能还不完整,只支持解码帧内编码帧。
  • python3中的url编码和解码

    千次阅读 2019-02-27 19:52:02
    python3中的url编码和解码 在用python进行web开发的时候,当url中含有中文,那么传递到后台服务器的会是编码过的url,我们可以用python3把编码后的文本转化成我们可以识别的内容。如下操作: import urllib test_str ...
  • 用C#语言编写的DataMatrix二维条码编码和解码源代码,可以在项目中直接使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 353,907
精华内容 141,562
关键字:

如何编码和解码