我需要在Python中获取UTF-8字符的八进制转义序列,并且想知道是否有任何更简单的方法来执行我想要做的事情,例如我忽略了标准库中的某些东西。我有一个临时的字符串操作函数,但我希望有一个更好的解决方案。
收件人:\360\220\205\245
现在我正在这样做:
char = '\U00010165' # this is how Python hands it over to me
char = str(char.encode())
# char = "b'\xf0\x90\x85\xa5'"
arr = char[4:-1].split(“\\x”)
# arr = ['f0', '90', '85', 'a5']
char = ''
for i in arr:
char += '\\' + str(oct(int(i,16)))
# char = \0o360\0o220\0o205\0o245
char = char.replace("0o", "")
有什么建议吗?
答案 0 :(得分:4)
使用format(i, '03o')
格式化为八进制数而不带前导0o
,或str.format()
也包含字面反斜杠:
>>> format(16, '03o')
'020'
>>> '\\{:03o}'.format(16)
'\\020'
并循环遍历编码的bytes
值;每个字符都是整数:
char = ''.join(['\\{:03o}'.format(c) for c in char.encode('utf8')])
演示:
>>> char = '\U00010165'
>>> ''.join(['\\{:03o}'.format(c) for c in char.encode('utf8')])
'\\360\\220\\205\\245'
>>> print(''.join(['\\{:03o}'.format(c) for c in char.encode('utf8')]))
\360\220\205\245