2016-09-30 3 views
0

파이썬에서 소켓을 통해 16 진수로 인코딩 된 데이터를 다른 클라이언트로 보내고 싶습니다. 나는 지금 내가 3.Python 3의 Python 2 str.decode ('hex')?

데이터는 다음과 같습니다 파이썬 포트에 원하는 파이썬 2에서 몇 시간 전에 모든 일을 관리 :

""" 16 03 02 """ 
다음

내가 문자열로 그걸 얻기 위해이 기능을 사용 : 지금 manag을

'\x16\x03\x02' 

:

x.replace(' ', '').replace('\n', '').decode('hex') 

그것은 다음 (그런데 유형 STR 인)과 같다 에드는 파이썬 3에서이를 찾을 수 있습니다 :

codecs.decode('160302', 'hex') 

을하지만, 다른 유형의 반환으로,

b'\x16\x03\x02' 

그리고 인코딩 모든 적절한 언어되지 않기 때문에, 내가 사용할 수 없습니다 UTF-8 또는 일부 디코더 거기에 잘못된 바이트가 있습니다 (예 : \ x00, \ xFF). 문자열 솔루션을 얻는 방법에 대한 아이디어는 파이썬 2에서와 마찬가지로 다시 이스케이프됩니까?

감사

답변

-1
a = """ 16 03 02 """.encode("utf-8") 
#Send things over socket 
print(a.decode("utf-8")) 

왜 소켓에 전송하고 UTF-8을 다시 디코딩을, UTF-8 인코딩하지?

0

파이썬 3의 'str'객체는 바이트 시퀀스가 ​​아니라 유니 코드 코드 포인트의 시퀀스입니다.

"데이터 보내기"는 send을 호출하는 경우 bytes을 사용할 올바른 유형입니다.

당신이 정말로 문자열을 원하는 경우 (안 3 바이트 만 12 유니 코드 코드 포인트) : 당신이 코드를 표현하기 위해 백 슬래시를 두 번해야하는

>>> import codecs 
>>> s = str(codecs.decode('16ff00', 'hex'))[2:-1] 
>>> s 
'\\x16\\xff\\x00' 
>>> print(s) 
\x16\xff\x00 

참고.

관련 문제