比对js和py的Base64编码解码,探求一个共通之处
javascript代码
对英文字符进行base64编码解码
var str = 'javascript'; // 编码 btoa(str) // "amF2YXNjcmlwdA==" // 解码 atob("amF2YXNjcmlwdA==") // "javascript"
对中文字符进行base64编码解码
var str = "China,中国" btoa(str) /* VM156:1 Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range. */ // 先对字符串进行编码 encodeURIComponent(str) // "China%EF%BC%8C%E4%B8%AD%E5%9B%BD" // 编码 btoa(encodeURIComponent(str)) // "Q2hpbmElRUYlQkMlOEMlRTQlQjglQUQlRTUlOUIlQkQ=" // 解码 decodeURIComponent(atob("Q2hpbmElRUYlQkMlOEMlRTQlQjglQUQlRTUlOUIlQkQ=")) // "China,中国"
python3代码
对英文字符进行base64编码解码
import base64 name = "javascript" # 编码 base64.b64encode(name.encode()) # b'amF2YXNjcmlwdA==' # 解码 base64.b64decode(b'amF2YXNjcmlwdA==').decode() # javascript
对中文字符进行base64编码解码
name = "China,中国" # 编码 base64.b64encode(name.encode()) # b'Q2hpbmHvvIzkuK3lm70=' # 解码 base64.b64decode(b'Q2hpbmHvvIzkuK3lm70=').decode() # China,中国
总结:
js和py3对英文的处理方式基本一致,编码结果也一样
发现,js对中文编码会报错,py对中文可以直接编码
按照js的思路,先按照URI的编码方式将字符编码
from urllib.request import quote, unquote name = "China,中国" # 先对文字进行url方式编码 quote(name) # 'China%EF%BC%8C%E4%B8%AD%E5%9B%BD' # 编码 base64.b64encode(quote(name).encode()) # b'Q2hpbmElRUYlQkMlOEMlRTQlQjglQUQlRTUlOUIlQkQ=' # 解码 unquote(base64.b64decode(b'Q2hpbmElRUYlQkMlOEMlRTQlQjglQUQlRTUlOUIlQkQ=').decode()) # China,中国
总结:
其中:
s 表示字符串
b 表示编码后的字符
这样,js和python就可以实现相同的Base64编码解码,可以用于前端代码解码,将js代码转换为python代码
参考
javascript 使用btoa和atob来进行Base64转码和解码
Python编程:URL网址链接中的中文编码与解码
简单明了区分escape、encodeURI和encodeURIComponent