一、编码的两大方式:

在python3.x中,字符串编码分为unicode和bytes两大类编码方式。

直接书写s='中国人',这种方式定义的编码方式为unicode,是通用的方式。

另一种是bytes编码方式,也就是所谓的二进制编码,可以分为utf-8,gbk,latin1等方式,但它们都是二进制编码方式。

unicode编码与二进制编码相互之间可以转化:

unicode.encode('utf-8')  unicode转utf-8编码

utf-8.decode('utf-8')  utf-8编码转unicode编码

二进制编码的表现形式为添加一个前缀b字符,如b'\xe4\xb8\xad',表示‘中’字。

注意:自己写二进制文件时,不能包含非ASCII编码字符,如b=b'中国'是非法编码,诸如b=b'chinese'是合法编码。

二、base64编码:

base64编码不是加密方式,而是一种编码方式。是由0-9a-zA-Z及+和/共64个字符(外加一个=号,是填充符,可以说是65个字符)作为基本字符进行编码。

具体编码原理见链接:base64编码方式

编码原理:每一种编码方式,都最终是用0、1两个值来组合代表某个字符。由于base64是由64个字符组成的,64可由6个bit值表示。因此,每个字符都是由6个bit表示。通常的英文字符是由8bit表示,中文由16bit表示。因此要将中英文转化成base64编码,中英文的总bit值必须要是6的倍数,否则在最后添加0组成6的倍数。最后组成的0会以=号的形式显示,也就是所谓的填充符号。

三、文本的读写:

open('xxx.txt',endcoding='xxx',‘wb')

open函数用来从磁盘中读取或写入文本或者二进制数据(图片,视频等)。因此分为两种情况:

1.写文本:

写文本时,写入的内容必须是unicode格式,不能是二进制编码(如‘中国’.encode('utf-8')这样的二进制也不行)。但是编码方式呢,可以通过encoding这个参数来控制。无论是按照哪种方式编码,写入txt文件后都是以可读的方式显示。

这是因为记事本本身就能够将不同的编码格式翻译成人类可读的方式。

2.写二进制文件:

写二进制文件时,写入模式必须加上’wb',且不能有encoding参数。由于二进制文件能够被记事本解读,因此通过encode()生成的二进制在记事本中也以人类可读方式显示。

三、base64加解密:

import base64

text='base64加密参数为二进制格式,返回加密文件也是二进制,解密后的文件也是二进制,必须通过decode()转化后才可读'
text=text.encode('utf-8')
text=base64.b64encode(text)#参数值text必须是二进制
print('这是加密后的文本: ',text) with open('encode.txt','wb') as fp:
fp.write(text) with open('encode.txt','rb') as fp:
text=fp.read()
text=base64.b64decode(text)#解密后也是二进制
print('这是解密后的文本: ',text)
print('这是转化成unicode后的原始文本: ',text.decode())#必须转化后才可读

执行结果:

这是加密后的文本:   b'YmFzZTY05Yqg5a+G5Y+C5pWw5Li65LqM6L+b5Yi277yM6L+U5Zue5Yqg5a+G5paH5Lu25Lmf5piv5LqM6L+b5Yi277yM6Kej5a+G5ZCO55qE5paH5Lu25Lmf5piv5LqM6L+b5Yi277yM5b+F6aG76YCa6L+HZGVjb2RlKCnovazljJblkI7miY3lj6/or7s='
这是解密后的文本:   b'base64\xe5\x8a\xa0\xe5\xaf\x86\xe5\x8f\x82\xe6\x95\xb0\xe4\xb8\xba\xe4\xba\x8c\xe8\xbf\x9b\xe5\x88\xb6\xef\xbc\x8c\xe8\xbf\x94\xe5\x9b\x9e\xe5\x8a\xa0\xe5\xaf\x86\xe6\x96\x87\xe4\xbb\xb6\xe4\xb9\x9f\xe6\x98\xaf\xe4\xba\x8c\xe8\xbf\x9b\xe5\x88\xb6\xef\xbc\x8c\xe8\xa7\xa3\xe5\xaf\x86\xe5\x90\x8e\xe7\x9a\x84\xe6\x96\x87\xe4\xbb\xb6\xe4\xb9\x9f\xe6\x98\xaf\xe4\xba\x8c\xe8\xbf\x9b\xe5\x88\xb6\xef\xbc\x8c\xe5\xbf\x85\xe9\xa1\xbb\xe9\x80\x9a\xe8\xbf\x87decode()\xe8\xbd\xac\xe5\x8c\x96\xe5\x90\x8e\xe6\x89\x8d\xe5\x8f\xaf\xe8\xaf\xbb'
这是转化成unicode后的原始文本:   base64加密参数为二进制,返回加密文件也是二进制,解密后的文件也是二进制,必须通过decode()转化后才可读

base64编码方式的更多相关文章

  1. iOS 中使用Base64编码方式编码图片数据

    最近一个项目要求对图片数据简单加密下,就是那种不能直接看到图片内容就行.于是我使用了base64编码对图片数据进行编码,把图片2进制数据变成了base64的字符串,再把这个字符串保存到server的数 ...

  2. base16,base32,base64 编码方式的通俗讲解

    作者:林冠宏 / 指尖下的幽灵 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/ 腾讯云专栏: ...

  3. 浅谈Base64编码

    浅谈Base64编码 我打赌当你见到Base64这个词的时候你会觉得在哪里见过,因为在你能够上网看到这篇文章的时候你已经在后台使用它了.如果您对二进制数有所了解,你就可以开始读它了. 打开一封Emai ...

  4. 媒体文件audio 转 base64 编码 (利用 FileReader & Audio 对象)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示

    Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示 在 开发中遇到应用c#及asp.net的在的webservice 保存图片并以xml文件形式现实出来 ...

  6. java 自定义实现base64编码转换

    1.base64编码转换 所谓base64编码,即按照规则把字符转化为"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456 ...

  7. VUE Base64编码图片展示与转换图片

    图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址,使用 base64 传输图片文件可以节省一个 http 请求,图片的 base64 编码可以算是前端优化的一 ...

  8. SSE图像算法优化系列三十一:Base64编码和解码算法的指令集优化。

        一.基础原理 Base64是一种用64个Ascii字符来表示任意二进制数据的方法.主要用于将不可打印的字符转换成可打印字符,或者简单的说是将二进制数据编码成Ascii字符.Base64也是网络 ...

  9. 计算机编码规则之:Base64编码

    目录 简介 Base64和它的编码原理 Base64的变体 Base64的编码细节 总结 简介 我们知道计算机中的文件可以分为两种,一种是人肉眼可读的文本类文件,一种是肉眼不可读的二进制文件.一般来说 ...

随机推荐

  1. Java 使用StringBuffer注意

    Stringbuffer使用注意   问题背景: 模拟客户端使用Socket请求服务器核心系统,核心系统正常响应,内容较大,近2715KB,大于2.6M多. 使用指定编码GBK来接收响应内容到过程中没 ...

  2. DevOps必备的20款顶级工具

    原文地址:http://os.51cto.com/art/201606/512423.htm 开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关.在整个开发生命周期涉及到一大批新旧工 ...

  3. 双向数据绑定---AngularJS的基本原理学习

    Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作. AngularJS非 ...

  4. 一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为ai,每盏灯可以覆盖到的最远距离为d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要是这个d最小,请找到这个最小的d。

    // ConsoleApplication3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> ...

  5. 使用jdk中keytool生成证书

    -genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥.私钥和证书 -alias 产生别名 -keystor ...

  6. mysql系列之1.mysql基础

    非关系型(NOSQL)数据库 键值存储数据库: memcached  /  redis  /  memcachedb  /  Berkeley db 列存储数据库: Cassandra  /  Hba ...

  7. serve-index用法、实现原理(源码解读)

    本文主要讲解serve-index的用法和实现原理(源代码分析). 一 说明 serve-index的功能是将文件夹中文件列表显示到浏览器中. serve-index是一个NodeJS模块,可以通过N ...

  8. StackOver上的一个wx刷新显示的例子

    import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None) self.panel = wx ...

  9. Eclipse中servlet显示无法导入javax.servlet包问题的解决方案

    项目名-->右键 Property-->选择 JavaBuild Path-->选择 Add External JARs-->选择 把servlet-api.jar的路径输入即 ...

  10. Cglib学习报错 java.lang.reflect.InvocationTargetException-->null

    package javacore.testForCglibProxy; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhan ...