답변:
리터럴 문자열은 기본적으로 Python3에서 유니 코드입니다.
즉 가정하면 text
A는 bytes
객체, 그냥 사용text.decode('utf-8')
unicode
of Python2는 Python3에서와 동일 str
하므로 다음과 같이 작성할 수도 있습니다.
str(text, 'utf-8')
너가 선호한다면.
str
는 유니 코드입니다. 그것이 이해되지 않는다, 그래서 전화를 "디코딩"입니다 decode
그것에
str(text, 'utf-8')
텍스트는 문자열 바이너리 여야합니다. 예str(b'this is a binary', 'utf-8')
Python 3.0의 새로운 기능 은 다음과 같습니다.
모든 텍스트는 유니 코드입니다. 그러나 인코딩 된 유니 코드는 이진 데이터로 표시됩니다.
utf-8을 출력하고 있는지 확인하려면 3.0의 유니 코드에 대한이 페이지의 예제가 있습니다 .
b'\x80abc'.decode("utf-8", "strict")
해결 방법으로 다음을 사용하고 있습니다.
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
.
unicode = str
2 회 또는 3 회 모두 실패 하지 않기 때문에 그냥 할 수있는 것 같습니다
from six import u as unicode
보다 자체 문서화 (6은 2/3 호환성 레이어이므로)이기 때문에 선호합니다.unicode = str
이 방법으로 \ uFE0F, \ u000A 등과 같은 문자를 변환하는 문제를 해결했습니다. 또한 16 바이트로 인코딩 된 이모지도 있습니다.
example = 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\\uD83D\\uDE0D\\uD83D\\uDE0D\\u2764\\uFE0F Present Moment Caf\\u00E8 in St.Augustine\\u2764\\uFE0F\\u2764\\uFE0F '
import codecs
new_str = codecs.unicode_escape_decode(example)[0]
print(new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\ud83d\ude0d\ud83d\ude0d❤️ Present Moment Cafè in St.Augustine❤️❤️ '
new_new_str = new_str.encode('utf-16', 'surrogatepass').decode('utf-16')
print(new_new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream😍😍❤️ Present Moment Cafè in St.Augustine❤️❤️ '