유니 코드 입력을 UTF-8 바이트 시퀀스의 \ x 이스케이프 처리 된 7 비트 ASCII 재배치로 변환하려고합니다. 어떻게 파이썬에서 x-escaped UTF-8을 생성 할 수 있습니까?
이
내가 대신"\u222a"
의 필요 내가 원하는 결과를 생성하는 것처럼이 보이는
"\xe2\x88\xaa"
>>> codecs.encode(u"\u222A", 'ascii', 'backslashreplace')
'\\u222a'
생성하고자하는 유사합니다 :
>>> u"\u222A".encode('utf-8')
'\xe2\x88\xaa'
을하지만 그것은 단지입니다 이스케이프 된 표현.
을 :에 repr가 추가하는 선행 및 후행 따옴표를 제거, 나는 그게 내가 원하는 것을 얻을 표현을 탈출 남용 할 수>>> [ord(c) for c in u"\u222A".encode('utf-8')]
[226, 136, 170]
: 실제 결과는 3 UTF-8 바이트의 12 ASCII 바이트 아니다
>>> 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]
턱. 조금 나아졌습니다.
>>> 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]
더 좋은 방법이 있나요?
은 왜 그런 짓을 했을까? .... 나는 왜 당신이 이것을 원할 것 같은지 이해하지 못한다. .. 어떻게 ... repr에 문제가 있겠는가? 그게 네가 원하는대로하는 것 같아. 난 아직도 왜 세상에서 너는 이것을 원할 것인가를 이해하지 못한다. –
왜 내가 백 슬래시 폼이 필요한지 물으면 마음을 먹을 수 있니? 더 쉬운 방법이 있을지도 모릅니다. 예를 들어,'json.dumps (obj) '를 사용하여 JSON 표현을 생성 할 수 있습니다. –
'repr' 행은 32-127 범위의 12 ASCII 바이트를 제공하여 원하는대로 정확하게 수행합니다. 왜 "Yuck"인가? –