[英]How can I generate \x-escaped UTF-8 in Python?
我想將Unicode輸入轉換為UTF-8字節序列的\\ x轉義的7位ascii-clean reprentation。
這類似於我所需要的,但是我想生成"\\xe2\\x88\\xaa"
而不是"\∪"
"\\xe2\\x88\\xaa"
>>> codecs.encode(u"\u222A", 'ascii', 'backslashreplace')
'\\u222a'
看起來它正在生成所需的結果:
>>> u"\u222A".encode('utf-8')
'\xe2\x88\xaa'
但這僅僅是逃脫的表示。 實際結果不是12個ascii字節,而是3個UTF-8字節:
>>> [ord(c) for c in u"\u222A".encode('utf-8')]
[226, 136, 170]
我可能會濫用逃脫的表示形式來獲取我想要的東西,去掉repr添加的前導和尾隨報價:
>>> repr(u"\u222A".encode('utf-8'))[1:-1]
'\\xe2\\x88\\xaa'
>>> [ord(c) for c in repr(u"\u222A".encode('utf-8'))[1:-1]]
[92, 120, 101, 50, 92, 120, 56, 56, 92, 120, 97, 97]
uck 這樣好一點:
>>> import binascii
>>> ''.join('\\x' + binascii.hexlify(c) for c in u"\u222A".encode('utf-8'))
'\\xe2\\x88\\xaa'
>>> [ord(c) for c in ''.join('\\x' + binascii.hexlify(c) for c in u"\u222A".encode('utf-8'))]
[92, 120, 101, 50, 92, 120, 56, 56, 92, 120, 97, 97]
有更好的方法嗎?
>>> u'\u222A'.encode('utf-8').encode('string-escape')
'\\xe2\\x88\\xaa'
>>> print u'\u222A'.encode('utf-8').encode('string-escape')
\xe2\x88\xaa
我認為您不會找到丑陋的解決方案。 這是一種保留原始字符串中所有ASCII字符而不將其轉換為十六進制序列的字符。
''.join(c if 32 <= ord(c) <= 127 else '\\x{:02x}'.format(ord(c)) for c in u"\u222A".encode('utf-8'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.