正确的八进制方式在Python中转义UTF-8字符

时间:2014-02-18 15:23:04

标签: python python-3.x utf-8

我需要在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", "")

有什么建议吗?

1 个答案:

答案 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