1.  Base64编码概述

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 这个术语最初是在“MIME内容传输编码规范”中提出的。Base64不是一种加密算法,它实际上是一种“二进制转换到文本”的编码方式,它能够将任意二进制数据转换为ASCII字符串的形式,以便在只支持文本的环境中也能够顺利地传输二进制数据。

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。

(1)base64编码:把二进制数据转为字符

(2)base64解码:把字符转为二进制数据

2. Base64编码简介

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

规则

关于这个编码的规则:

①.把3个字节变成4个字节。

②每76个字符加一个换行符。

③.最后的结束符也要处理。

如下图Base64编码索引表,字符选用了“A-Z 、 a-z 、 0-9、+、 / ”64个可打印字符。数字代表字符索引,这个是标准Base64标准协议规定的,不能更改。64个字节用6个bit位就可以全部表示(32+16+8+4+2+1)就可以全部表示。这里注意一个Base64字符是8个bit,但有效部分只有右边6个bit,左边两个永远是0。

举例:

转换前 11111111, 11111111, 11111111 (二进制)

转换后 00111111, 00111111, 00111111, 00111111 (二进制)

上面的三个字节是原文,下面的四个字节是转换后的Base64编码,其前两位均为0。

转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码)

The Base64 Alphabet

索引

对应字符

索引

对应字符

索引

对应字符

索引

对应字符

0

A

17

R

34

i

51

z

1

B

18

S

35

j

52

0

2

C

19

T

36

k

53

1

3

D

20

U

37

l

54

2

4

E

21

V

38

m

55

3

5

F

22

W

39

n

56

4

6

G

23

X

40

o

57

5

7

H

24

Y

41

p

58

6

8

I

25

Z

42

q

59

7

9

J

26

a

43

r

60

8

10

K

27

b

44

s

61

9

11

L

28

c

45

t

62

+

12

M

29

d

46

u

63

/

13

N

30

e

47

v

14

O

31

f

48

w

15

P

32

g

49

x

16

Q

33

h

50

y

 应用

Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的一个标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

为解决此问题,可采用一种用于URL的改进Base64编码,它不仅在末尾去掉填充的'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“/”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

其他应用

Mozilla Thunderbird和Evolution用Base64来保密电子邮件密码

Base64 也会经常用作一个简单的“加密”来保护某些数据,而真正的加密通常都比较繁琐。

垃圾讯息传播者用Base64来避过反垃圾邮件工具,因为那些工具通常都不会翻译Base64的讯息。

在LDIF档案,Base64用作编码字串。

3. Base64转换为docx格式

那么如何将从URL中获取的Base64解码为docx文件呢?下面给出了python实现方法,修改文件名和路径,运行即可在当前目录生成同名的doc及docx文件。

import base64
import re
import subprocess
import pythoncom
import osfile_name="a.txt"   #需要转换的Base64文件
path=r"F:\办公\8月\localCoverage"   #文件所在目录
file_path=os.path.join(path,file_name)
doc_save_path = os.path.join(os.path.splitext(file_path)[0] + ".doc")
docx_save_path = os.path.join(os.path.splitext(file_path)[0] + ".docx")#先将Base64转成doc文件
def base64_to_doc(base64_data, doc_save_path): #param base64_data: base64流,param word_save_path: Word保存路径with open(doc_save_path, 'wb') as f:f.write(base64.b64decode(base64_data)) #然后将doc文件转成docx文件
def win_save_to_docx(base64str,doc_save_path,docx_save_path):base64_to_doc(base64str, doc_save_path)pythoncom.CoInitialize()from win32com import client# 转换doc为docxword = client.Dispatch("Word.Application")  # 打开word应用程序doc = word.Documents.Open('{}'.format(doc_save_path))  # 打开word文件doc.SaveAs(docx_save_path, 16)  # 另存为后缀为".docx"的文件,其中参数12或16指docx文件doc.Close()  # 关闭原来word文件if __name__ == "__main__":with open (file_name,'r') as f:base64str=" ".join([l.rstrip() for l in f])win_save_to_docx(base64str, doc_save_path,docx_save_path)

Base64转docx的python实现相关推荐

  1. Py之docx:Python库之docx简介、安装、使用方法详细攻略

    Py之docx:Python库之docx简介.安装.使用方法详细攻略 目录 Python库之docx简介 Python库之docx安装 docx使用方法 1.打开文档

  2. base64加密原理及python、C语言代码实现

    base64算法 base64加密原理 关于base64,百度百科给出的解释是: Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制 ...

  3. python base64编码_JS和Python实现AES算法

    1. AES原理 AES算法是典型的对称加密算法,AES原理可以学习这两篇文档: 漫画:什么是AES算法:https://www.toutiao.com/i6783550080784794124/ A ...

  4. python docx 替换文字_在.docx文件-Python中查找和替换文本

    我一直在寻找一种方法来查找和替换docx文件中的文本,但运气不好.我试过docx模块,但没能成功.最后,我使用zipfile模块并替换docx存档中的document.xml文件,得出了下面描述的方法 ...

  5. python base64 实现_用Python开发GUI实战教程:图片转换素描画工具

    python作为胶水语言,它几乎是无所不能的,但个人一直觉得在GUI开发方面,python可以算作是短板了,为什么?因为性能-python的性能问题,往往出现在其他编程语言对其的鄙夷中.但不管如何py ...

  6. ocr 合合平台pdf转doc文档

    合合平台:https://www.textin.com/experience/pdf-to-word 文件base64转文档:Base64转docx的python实现_cjjmt的博客-CSDN博客 ...

  7. Python读写docx文件(三十五)

    Python读写docx文件 Python读写word文档有现成的库可以处理 pip install python-docx安装一下. https://python-docx.readthedocs. ...

  8. 三十一、Python读写docx文件

    @Author:Runsen 文章目录 Python读写docx文件 Python读写docx文件 Python读写word文档有现成的库可以处理 pip install python-docx安装一 ...

  9. python核心教程第二版答案_python核心编程第二版第4章习题答案.docx

    python核心编程第二版第4章习题答案.docx 4-1.Python 对象.与所有 Python 对象有关的三个属性是什么?请简单的描述一下. 答案: 所有的 Python 对象都拥有三个特性:身 ...

最新文章

  1. SQLSERVER使用CLR Stored Procedure导出数据到Excel
  2. amd一键超频怎么用_头条信息流“一键起量”工具怎么用?经验分享
  3. python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言
  4. kuangbin专题十六 KMP扩展KMP HDU2594 Simpsons’ Hidden Talents
  5. python爬虫短片_Python爬虫练习:爬取全民小视频(附代码,过程)
  6. 算术的c语言程序设计,C 程序设计:变量与算术表达式
  7. 贺岁喜剧《高兴》山寨歌舞大狂欢 陕西话的RAP
  8. PowerShell 笔记
  9. android 申请拍照权限,React Native模块之Permissions权限申请的实例相机
  10. 通过maven test 报org.apache.ibatis.binding.BindingException: Invalid bound statement
  11. 监控web状态的脚本
  12. Qt编程之mapx组件编程
  13. 腾讯企业邮箱开通过程中需要添加那些域名解析?
  14. android使用ffmpeg生成有声图片,多张图片添加音频文件合成mp4文件
  15. Hbase(二)hbase建表
  16. win xp32位系统安装mysql详细步骤
  17. 我拿到了梦寐以求的字节跳动和腾讯双offer!知乎上转疯了!
  18. 小狼毫自定义短语-Rime-双拼
  19. 点云数据滤波处理(PCL实现)
  20. 移动应用开发--实现微博界面(Andriod)

热门文章

  1. 树莓派3配置局域网打印服务器惠普打印机HP1108
  2. 输入字符串按ASCⅡ大小排序
  3. Study JavaScript《JS操作SVG的一些知识》
  4. MySQL基本管理(库管理与表管理)
  5. 批量下载网页中所有的PDF文档
  6. 基于Python的算术编码的设计与实现
  7. VUE项目移动端H5调用摄像头扫码
  8. 第三章数字逻辑电路基础
  9. vue 中监听监听按键
  10. 【手把手教你用Matlab做双目摄像头标定】Ubuntu环境