2017-12-08 16 views
2

이모티콘을 파이썬 3의 유니 코드로 변환하려고합니다. 예를 들어 이모티콘을 가지고 있고이 코드에서 유니 코드 'U + 1F600'을 얻고 싶습니다. 마찬가지로 'U + 1F600'을 다시 변환하고 싶습니다. 이제 설명서를 읽고 몇 가지 옵션을 시도했지만 pythons 동작이 나를 혼란스럽게합니다.이모티콘을 파이썬에서 유니 코드로 또는 그 반대로 변환하기 3

>>> x = '' 
>>> y = x.encode('utf-8') 
>>> y 
b'\xf0\x9f\x98\x80' 

그림 이모티콘은 바이트 개체로 변환됩니다.

>>> z = y.decode('utf-8') 
>>> z 
'' 

바이트 개체를 그림 이모티콘으로 다시 변환했습니다.

>>> c = '\U0001F600' 
>>> d = c.encode('utf-8') 
>>> d 
>>> b'\xf0\x9f\x98\x80' 

이 다시 바이트 인코딩을 출력합니다 :

이제 이모티콘에 대한 유니 코드를 복용.

>>> d.decode('utf-8') 
>>> '' 

이렇게하면 그림이 다시 인쇄됩니다. 나는 유니 코드와 그림 이모티콘 만 변환하는 방법을 정말로 알 수 없다.

답변

2

''은 이미 유니 코드 개체입니다. UTF-8은 유니 코드가 아니며 유니 코드의 바이트 인코딩입니다. 유니 코드 문자의 코드 포인트 번호를 얻으려면 ord 함수를 사용할 수 있습니다. 원하는 형태로 인쇄하려면 16 진수로 서식을 지정할 수 있습니다. 이처럼 :

s = '' 
print('U+{:X}'.format(ord(s))) 

출력

U+1F600 

파이썬 3.6 이상이있는 경우, 당신은 할 수 그것에게 F-문자열을 사용하여도 짧은 (더 효율적인) :

s = '' 
print(f'U+{ord(s):X}') 

'\U0001F600'과 같은 유니 코드 이스케이프 시퀀스를 만들려면 'unicode-escape' 코덱이 있어야합니다. 그러나 bytes 문자열을 반환하므로 텍스트로 다시 변환 할 수 있습니다. 'UTF-8'코덱을 사용할 수도 있지만 'ASCII'코덱을 사용하는 것이 좋습니다. 유효한 ASCII 만 포함되어 있기 때문에 가능합니다.

s = '' 
print(s.encode('unicode-escape')) 
print(s.encode('unicode-escape').decode('ASCII')) 

출력

b'\\U0001f600' 
\U0001f600 

난 당신이 스택 오버 플로우 공동 창업자 Spolsky 조엘 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)하여이 짧은 기사를 살펴 보시기 바랍니다.