编码转换

python常用函数

和自甴很熟 提交于 2020-03-16 18:44:23
import urllib.request import re ###<source src="http://ocs.maiziedu.com/55ca5753cdf0403eb6b700d81dc5a896.mp4" type='video/mp4'/> #### <source src="http://ocs.maiziedu.com/55ca5753cdf0403eb6b700d81dc5a896.mp4" type='video/mp4'/> ##res = urllib.request.urlopen('http://www.maiziedu.com/course/qrsqd/6-164/') ##html = res.read().encode('utf-8') ##decode 解译 encode译成 ###先用utf-8解,再用gbk译成 ###字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码, ###即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 ###decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。 ##

编码原理_base64编码原理

懵懂的女人 提交于 2020-03-16 08:11:06
1.1 Base64 编码原理 1.1.1 概要 : Base64是通讯传输中较为常见的编码方式之一。 (注意是编码算法,而非加密算法) 参数传输的过程中会经常遇到的一种情况:使用英文不会涉及到乱码,但一旦涉及到其他语言就可能会出现乱码情况以及网络上传输的字符并不全是可打印的字符,例如视频、图片等。 Base64的出现就是为了解决此问题,它基于64个可打印的字符来表示二进制的数据的一种方法。 电子邮件出现时,只能传输英文,但随用户增加,中文、日文等文字的用户需求增加,但字符并不能被服务器或网关进行有效处理,因此 Base64就出现了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。 1.1.2 编码原理 : 我们都知道,计算机数据以字节 (byte)为存储单位, 一个字节由组成8位(bit)二进制组成。那么每一位就则是最小的信息单位。 所以 1Byte=8bit (本文中的byte作为计算存储容量的计量单位。 Byte 也是一种无符号的数据类型,取值 0-255,且不可取负数。但不在本文章的叙述范围内,暂不做考虑。) 第一步,将待转换的字符串每三个字节分为一组,每个字节占 8bit,那么共有24个二进制位。 第二步,将上面的 24个二进制位每6个一组,共分为4组。 第三步,在每组前面添加两个 0,每组由6个变为8个二进制位,总共32个二进制位

一文说清文本编码那些事

只谈情不闲聊 提交于 2020-03-15 20:34:19
一直以来,编码问题像幽灵一般,不少开发人员都受过它的困扰。 试想你请求一个数据,却得到一堆乱码,丈二和尚摸不着头脑。有同事质疑你的数据是乱码,虽然你很确定传了 UTF-8 ,却也无法自证清白,更别说帮同事 debug 了。 有时,靠着百度和一手瞎调的手艺,乱码也能解决。尽管如此,还是很羡慕那些骨灰级程序员。为什么他们每次都能犀利地指出问题,并快速修复呢?原因在于,他们早就把编码问题背后的各种来龙去脉搞清楚了。 本文从 ASCII 码说起,带你扒一扒编码背后那些事。相信搞清编码的原理后,你将不再畏惧任何编码问题。 从 ASCII 码说起 现代计算机技术从英文国家兴起,最先遇到的也是英文文本。英文文本一般由 26 个字母、 10 个数字以及若干符号组成,总数也不过 100 左右。 计算机中最基本的存储单位为 字节 ( byte ),由 8 个比特位( bit )组成,也叫做 八位字节 ( octet )。 8 个比特位可以表示 $ 2^8 = 256 $ 个字符,看上去用字节来存储英文字符即可? 计算机先驱们也是这么想的。他们为每个英文字符编号,再加上一些控制符,形成了我们所熟知的 ASCII 码表。实际上,由于英文字符不多,他们只用了字节的后 7 位而已。 根据 ASCII 码表,由 01000001 这 8 个比特位组成的八位字节,代表字母 A 。 顺便提一下,比特本身没有意义,

Python3 中的 str 和 bytes

女生的网名这么多〃 提交于 2020-03-15 11:29:00
与 Python2.X 不同,Python3.X 严格区分了 str 和 bytes 两种类型。文本为 Unicode,由 str 类型表示;二进制数据则由 bytes 表示。 Python3.X 不会以任意隐式的方式混用 str 和 bytes。因此使用者不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。 例如 Python3.X 中的 socket.send() 函数,如果传入未编码的字符串,会报错: >>> client.send("test str") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: a bytes-like object is required, not 'str' >>> client.send(b"test str") #将参数转换成 bytes 类型 8 #返回发送的数据长度 编码发展的历史 在计算机历史的早期,美国为代表的英语系国家主导了整个计算机行业,26个英文字母组成了多样的英语单词、语句、文章。因此,最早的字符编码规范是 ASCII码,一种8位(即1个字节)的编码规范 ,它可以涵盖整个英语系的编码需要。 编码是什么?编码就是把一个字符用一个二进制来表示。我们都知道

身份证号的验证工具类---java

落爺英雄遲暮 提交于 2020-03-14 06:36:59
就简单的不调用身份证接口就验证身份证的一方法: package com.zelyy.common.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; /** * 身份证工具类 * */ public class IdcardUtils extends StringUtils{ /** 中国公民身份证号码最小长度。 */ public static final int CHINA_ID_MIN_LENGTH = 15; /** 中国公民身份证号码最大长度。 */ public static final int CHINA_ID_MAX_LENGTH = 18; /** 省、直辖市代码表 */ public static final String cityCode[] = { "11", "12", "13", "14", "15", "21", "22", "23", "31", "32", "33",

【2020Python修炼记13】Python语法入门—字符编码

夙愿已清 提交于 2020-03-12 19:06:12
一、知识储备 1、三大核心硬件——CPU,内存,硬盘 所有软件都是运行硬件之上的,与运行软件相关的三大核心硬件为cpu、内存、硬盘 #1、软件运行前,软件的代码及其相关数据都是存放于硬盘中的 #2、任何软件的启动都是将数据从硬盘中读入内存,然后cpu从内存中取出指令并执行 #3、软件运行过程中产生的数据最先都是存放于内存中的,若想永久保存软件产生的数据,则需要将数据由内存写入硬盘 2、文本编辑器读取文件内容的流程 #阶段1、启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word) #阶段2、文件编辑器会将文件内容从硬盘读入内存 #阶段3、文本编辑器会将刚刚读入内存中的内容显示到屏幕上 3、Python解释器执行文件的流程 以python test.py为例,执行流程如下: #阶段1、启动python解释器,此时就相当于启动了一个文本编辑器 #阶段2、python解释器相当于文本编辑器,从硬盘上将test.py的内容读入到内存中 #阶段3、python解释器解释执行刚刚读入的内存的内容,开始识别python语法 4、总结—Python解释器&文本编辑器的异同 #1、相同点: 前两个阶段二者完全一致,都是将硬盘中文件的内容读入内存,详解如下 python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样 #2、不同点:

集合 字符编码

て烟熏妆下的殇ゞ 提交于 2020-03-12 13:45:08
一.集合 一)作用:集合 list tuple dict一样都可以存放多个值,但实际和主要用于:去重 关系运算 二)定义:在{}内用逗号分隔开多个元素,集合具备以下三个特点: 1:每个元素必须是不可变类型 2:集合内没有重复的元素 3:集合内元素无序 1 s = {1,2,3,4} # 本质 s = set({1,2,3,4}) # 注意1:列表类型是索引对应值,字典是key对应值,均可以取得单个指定的值,而集合类型既没有索引也没有key与值对应,所以无法取得单个的值,而且对于集合来说,主要用于去重与关系元素,根本没有取出单个指定值这种需求。 # 注意2:{}既可以用于定义dict,也可以用于定义集合,但是字典内的元素必须是key:value的格式,现在我们想定义一个空字典和空集合,该如何准确去定义两者? d = {} # 默认是空字典 s = set() # 这才是定义空集合 三)类型转换: 但凡能被for循环的遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型 1 >>> s = set([1,2,3,4]) 2 >>> s1 = set((1,2,3,4)) 3 >>> s2 = set({'name':'jason',}) 4 >>> s3 = set('egon') 5 >>> s,s1,s2,s3 6 {1, 2, 3, 4}

base64原理

谁说我不能喝 提交于 2020-03-12 11:32:51
一、 base64是什么? 按照 RFC2045 的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.) 使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。 二、 base64的作用及用途 作用: 实现简单的数据加密,使用户一眼望去完全看不出真实数据内容,base64算法的复杂程度要小,效率要高相对较高。 某些系统或应用,只能使用ASCII字符,例如Email,需使用base64对数据进行编码。 用途: 在MIME中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。在Email的传送过程中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位(0-127)。因此,如果用户发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有“历史问题”的网关时就可能会出现问题。网关可能会把最高位置为0。这个时候,问题出现了

Python3的编码总结

…衆ロ難τιáo~ 提交于 2020-03-11 22:00:03
Python3编码结论: Python3的字符串在内存中是用Unicode(占空间和带宽)保存的,所以不能直接用于存储,传输。要通过其它编码转换成相对应的字节码 str ----encode--->byte byte----decode--->str 常见的编码 编码是美国最先发明的,最先出来的是ASCII编码,最早计算机在设计时采用8个比特(bit)作为一个字节(byte),所以一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节; 陆续大多国家都有自己的编码; Unicode把所有语言统一在一套编码里,但Unicode是不可变长的编码,如果是纯英文的文章保存,占用的存储空间、传输带宽比ascii大一倍; 最终衍生出UTF-8可变长编码 1. ASCII编码:给 英文字母,数字,标点,字符 转换成计算机能识别的二进制数规定一个大家都认可的标准2 2. GBK编码:是汉字编码(含英文字母,数字,标点,字符部分)标准之一,是在 GB2312-80 标准 基础上的内码扩展规范,使用了双字节编码 3. Unicode编码:覆盖世界上所有字符的编码,最常用的是用 两个字节表示一个字符(如果要用到非常偏僻 的字符,就需要4个字节) 4. UTF-8编码:UTF-8兼容ascii,是可边长的字符串,节省空间和带宽 记事本存储-

如何确定文件编码格式的方法??

杀马特。学长 韩版系。学妹 提交于 2020-03-11 19:00:06
当我们用System.IO.StreamReader读取包含汉字的txt文件时,经常会读出乱码(StreamWriater写文本文件也有类似的问题),原因很简单,就是文件的编码(encoding)和StreamReader/Writer的encoding不对应。   为了解决这个问题,我写了一个类,来取得一个文本文件的encoding,这样我们就可以创建对应的StreamReader和StreamWriter来读写,保证不会出现乱码现象。其实原理很简单,文本编辑器(比如XP自带的记事本)在生成文本文件时,如果编码格式和系统默认的编码(中文系统下默认为GB2312)不一致时,会在txt文件开头部分添加特定的“编码字节序标识(Encoding Bit Order Madk,简写为BOM)”,类似PE格式的"MZ"文件头。这样它在读取时就可以根据这个BOM来确定该文本文件生成时所使用的Encoding。这个BOM我们用记事本等程序打开默认是看不到的,但是用stream按字节读取时是可以读到的。我的这个TxtFileEncoding类就是根据这个BOM“文件头”来确定txt文件生成时用到的编码的。 // 作者:袁晓辉 // 2005-8-8 // // // // // // using System; using System.Text; using System.IO;