我想转换由' 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'
有没有简洁的方法来实现这个?或者我是否需要使功能添加'%'每个十六进制字符?
答案 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