python3으로 유니 코드 문자열을 만드는 방법


99

나는 이것을 사용했다 :

u = unicode(text, 'utf-8')

그러나 Python 3에서 오류가 발생합니다 (또는 ... 뭔가를 포함하는 것을 잊었을 수도 있습니다).

NameError: global name 'unicode' is not defined

감사합니다.


17
파이썬 3로 업그레이드해야하는 멋진 이유가 있다면 기본적으로 유니 코드입니다.
JBernardo 2011

답변:


137

리터럴 문자열은 기본적으로 Python3에서 유니 코드입니다.

즉 가정하면 textA는 bytes객체, 그냥 사용text.decode('utf-8')

unicodeof Python2는 Python3에서와 동일 str하므로 다음과 같이 작성할 수도 있습니다.

str(text, 'utf-8')

너가 선호한다면.


58
TypeError : 디코딩 str은 지원되지 않습니다
Gank

9
@Gank, Python3에서 a str는 유니 코드입니다. 그것이 이해되지 않는다, 그래서 전화를 "디코딩"입니다 decode그것에
존 라 Rooy

동일한 TypeError. str (txt) 또는 아래 @magicrebirth의 코드로 바꾸십시오
Simon

3
원본 샘플은 명확하지 않습니다. 따라서 python3에서하려는 경우 str(text, 'utf-8')텍스트는 문자열 바이너리 여야합니다. 예str(b'this is a binary', 'utf-8')
killua8p

10

Python 3.0의 새로운 기능 은 다음과 같습니다.

모든 텍스트는 유니 코드입니다. 그러나 인코딩 된 유니 코드는 이진 데이터로 표시됩니다.

utf-8을 출력하고 있는지 확인하려면 3.0의 유니 코드에 대한이 페이지의 예제가 있습니다 .

b'\x80abc'.decode("utf-8", "strict")

1
이것이 바로 Python 2에서 '\ x80abc'.decode ( "utf-8", "strict")에 필요한 것입니다. 감사합니다
workplaylifecycle

9

해결 방법으로 다음을 사용하고 있습니다.

# Fix Python 2.x.
try:
    UNICODE_EXISTS = bool(type(unicode))
except NameError:
    unicode = lambda s: str(s)

12
람다 함수를 사용하는 이유는 무엇입니까? 이러한 메서드는 어떤 경우에도 동일한 방식으로 호출됩니다. 이것은 더 간단한 변형입니다 : try: unicode = str; except: pass.
Nicolas Bouliane

1
unicode = str2 회 또는 3 회 모두 실패 하지 않기 때문에 그냥 할 수있는 것 같습니다
Nickolai

또는 from six import u as unicode보다 자체 문서화 (6은 2/3 호환성 레이어이므로)이기 때문에 선호합니다.unicode = str
Nickolai

3

이 방법으로 \ 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❤️❤️ '

0

내가 수년 동안 사용한 Python 2 프로그램에는 다음 줄이 있습니다.

ocd[i].namn=unicode(a[:b], 'utf-8')

이것은 Python 3에서 작동하지 않았습니다.

그러나 프로그램은 다음과 함께 작동하는 것으로 나타났습니다.

ocd[i].namn=a[:b]

처음에 왜 유니 코드를 넣었는지 기억이 나지 않지만 이름에 스웨덴 문자 인 åäöÅÄÖ가 포함될 수 있기 때문이라고 생각합니다. 그러나 "유니 코드"없이도 작동합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.