今天在调接口时,就遇了一个这样的接口:
将双字节文字使用Big Endian编码后,转为16进制HEX字符串传输。
这个描述让我费了好大功夫去搜python3应该怎样实现。其实就是分两步:
1. 将内容使用utf-16-be编码去encode。
2. 将encode后的内容转为16进制的字符串。
import binascii
import sys
print("本机存储模式是{} Endian.\n".format(sys.byteorder.capitalize()))
content = "待传输中文文本" # content是str类型
print("原文本为:", content, '\n')
# 先看最终代码
result = binascii.b2a_hex(content.encode('utf-16-be'))
print("编码后文本为:", result, '\n')
content = binascii.a2b_hex(result).decode('utf-16-be')
print("解码后文本为:", content, '\n')
# ————————————————————————————————————————————————
# 下面开始解释代码
# 解释编码
coded = content.encode('utf-16-be') # coded是bytes类型,uft-16就不解释了,be是Big Endian的缩写。
print("使用utf-16-be编码后为:", coded, '\n')
result = binascii.b2a_hex(coded) # b2a应该是bytes to ascii,hex就是16进制的意思,b2a_hex方法和hexlify方法是相同的。
print("utf-16-be转为hex为:", result, '\n')
# 解释解码
coded = binascii.a2b_hex(result) # 同理a2b应该是ascii to bytes,hex也是16进制的意思,a2b_hex方法和unhexlify方法是相同的。
print("hex转为utf-16-be为:", coded, '\n')
content = coded.decode('utf-16-be')
print("utf-16-be解码后的原文本为:", content, '\n')