如何将字节转换为以'%'开头的十六进制字符串在python中

时间:2017-04-05 21:50:00

标签: python string unicode hex

我想转换由' utf-8'编码的Unicode字符。到十六进制字符串,其字符以'%'开头因为API服务器只识别此表单。

例如,如果我需要输入unicode字符'※'到服务器,我应该将此字符转换为字符串'%E2%80%BB'。 (字符是上限还是下限并不重要。)

我找到了将unicode字符转换为字节并将字节转换为https://stackoverflow.com/a/35599781中的十六进制字符串的方法。

>>> print('※'.encode('utf-8'))
b'\xe2\x80\xbb'
>>> print('※'.encode('utf-8').hex())
e280bb

但我需要以'%'开头的形式喜欢'%E2%80%BB'或%e2%80%bb'

有没有简洁的方法来实现这个?或者我是否需要使功能添加'%'每个十六进制字符?

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点:

首选解决方案。使用urllib.parse.urlencode并指定多个参数并一次编码:

urllib.parse.urlencode({'parameter': '※', 'test': 'True'})
# parameter=%E2%80%BB&test=True

或者,您可以手动将其转换为两个符号的块,然后使用%符号加入:

def encode_symbol(symbol):
    symbol_hex = symbol.encode('utf-8').hex()
    symbol_groups = [symbol_hex[i:i + 2].upper() for i in range(0, len(symbol_hex), 2)]
    symbol_groups.insert(0, '')
    return '%'.join(symbol_groups)

encode_symbol('※')
# %E2%80%BB