python 二维码生成与解析,解决二维码部分中文乱码问题

  1. 使用qrcode生成二维码,安装qrcode
pip install qrcode
  1. 生成二维码,并保存图片
import qrcode

# 创建QRCode对象
qr = qrcode.QRCode(
        version=40,
        error_correction=qrcode.constants.ERROR_CORRECT_M,
        box_size=10,
        border=4,
    )
    # data为要生成的二维码文本
    qr.add_data(data.encode('utf-8'))
    qr.make(fit=True)
    img = qr.make_image(fill_color="black", back_color="white")
    img.save("qr_code.png")
  1. 使用pyzbar,安装pyzbar
pip install pyzbar
  1. 二维码解析
from pyzbar import pyzbar

result = pyzbar.decode(Image.open('qr_code.png'))

有些中文,解析出来可能是乱码,这里我使用了base64对字符串进行加密,二维码识别解析之后再通过base64解密

base64文本加密

import base64

txt_data = base64.b64encode("文本内容".encode('utf-8')).decode("utf-8")
print(txt_data)

base64文本解密

# txt_data base64加密后密文
txt = base64.b64decode(txt_data).decode("utf-8")

完整代码

import qrcode
import base64

from PIL import Image
from pyzbar import pyzbar


def make_qrcode(data):
    # 创建QRCode对象
    qr = qrcode.QRCode(
        version=40,
        error_correction=qrcode.constants.ERROR_CORRECT_M,
        box_size=10,
        border=4,
    )
    # data为要生成的二维码文本
    qr.add_data(data.encode('utf-8'))
    qr.make(fit=True)
    img = qr.make_image(fill_color="black", back_color="white")
    img.save("qr_code_image.png")


encode_txt = base64.b64encode("文本加密长文本长文本".encode('utf-8')).decode("utf-8")
make_qrcode(encode_txt)

result = pyzbar.decode(Image.open('qr_code_image.png'))
#获取解析内容
decode_qr_txt = result[0].data.decode('utf-8')
decode = base64.b64decode(decode_qr_txt).decode("utf-8")
print(decode)

注意:如果是长文本的二维码生成与解析,需要在设置生成二维码的文本长度控制为4的倍数

即:上边代码块的 encode_txt 需要切割为4的倍数,由于已经转为base64格式,我默认设置长度为2000(仅供参考)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值