파이썬 문자열에서 u 접두사는 무엇입니까?


232

처럼 :

u'Hello'

내 생각에 "유니 코드"를 나타내는 것입니다. 맞습니까?

그렇다면 언제부터 이용할 수 있습니까?

답변:


147

네 말이 맞아, 3.1.3 참조 . 유니 코드 문자열 .

파이썬 2.0부터는 구문이었습니다.

파이썬 3은 기본 문자열 유형이 유니 코드이므로 중복을 만들었습니다. 버전 3.0에서 3.2까지는 제거되었지만 Python 2와의 호환성을 위해 3.3 이상 으로 다시 추가되어 2에서 3으로의 전환을 지원했습니다.


6
파이썬 3에서는 더 이상 필요하지 않지만 여전히 유효한 구문을 추가해야합니다.
Martin Thoma

유니 코드 + 원시 (정규식) 문자열 (예 ur"string"
:)을 결합

123

u는 u'Some String'문자열이 유니 코드 문자열 임을 의미 합니다. .

Q : 끔찍하고 끔찍하며 Google 검색에서 여기에 도착했습니다. 이 데이터를 파일에 쓰려고하는데 오류가 발생합니다. 이번에는 가장 간단하고 결함이있는 죽은 솔루션이 필요합니다.

A : 실제로 모든 소프트웨어 개발자는 Joel의 절대 최소값을 반드시 읽어야합니다. 유니 코드 및 문자 집합에 대해 반드시 알아야합니다 (변명 없음). 에세이에 합니다.

Q : Sry No Time Code PLS

벌금. str('Some String')또는을 시도하십시오 'Some String'.encode('ascii', 'ignore'). 하지만 당신은 정말에 대한 답변과 토론의 일부를 읽어야 유니 코드 문자열로 변환 하고 문자 인코딩에 우수, 우수, 프라이머.


6
문자열에 ASCII 텍스트 만 포함 된 경우 작동합니다 . 다른 모든 경우에는 명시 적으로 인코딩해야합니다.
Martijn Pieters

2
이것은 u ''를 "제거하기위한"것으로 취급합니다. 이것은 당신이 실제로 그것이 무엇인지 이해하지 못한다는 것을 말해줍니다. 일반적으로 "제거"하고 싶지는 않으며, 유니 코드 문자열에서 바이트 문자열을 만드는 올바른 방법은 해당 문자열에 포함 된 내용과 컨텍스트에 따라 다릅니다.
Lennart Regebro

2
@LennartRegebro는 완전히 동의했습니다-이것은 뺨에 혀가 튀어 나온 끔찍한 대답이지만 일종의 무서운 공언을 축적했습니다. 사람들을 올바른 방향으로 조종하기 위해 편집했습니다.
앤드류

1
재미있었습니다! 감사! 기사는 17 살이며 여전히 정확합니다. 와.
Kerwin Sneijders

52

내 생각에 "유니 코드"를 나타내는 것입니다. 맞습니까?

예.

그렇다면 언제부터 이용할 수 있습니까?

파이썬 2.x.

Python 3.x에서 문자열은 기본적으로 유니 코드를 사용하므로 u접두사 가 필요하지 않습니다 . 참고 : Python 3.0-3.2에서 u는 구문 오류입니다. Python 3.3 이상에서는 2/3 호환 앱을 더 쉽게 작성할 수 있습니다.


4
u접두사 를 사용하는 것은 Python 3의 구문 오류입니다 .
Tim Pietzcker

14
@TimPietzcker : 3.0-3.2에서만; 3.3+에서는 2.6 + / 3.3 + 단일 코드베이스 라이브러리 및 앱을보다 쉽게 ​​작성할 수 있도록하는 것이 합법적이며 의미가 없습니다.
abarnert

@abarnert : 글쎄, 그 의견은 이제 4 살 반이되었습니다 :)
Tim Pietzcker

3
@TimPietzcker : 물론, 귀하의 의견은 2010 년 검색으로이 유용한 답변을 찾는 사람에게 유용한 부록이 되었 듯이, 2014 년에 발견 한 사람에게 3.3의 변화를 언급하는 것이 유용하다고 생각합니다. 답변, 그러나 나는 대부분의 사람들이 겪지 않을 사소한 점이라고 생각합니다 (2014 년에 여전히 3.0-3.2를 사용하지 않는 한 "접두사가 필요 없음"만 있으면됩니다).
abarnert

임의의 사용자가 다운로드하여 실행할 수있는 코드를 작성하고 가정을하지 않고 가능한 대부분의 경우를 다루려면 3.0-3.2가 중단 될 수 있습니다. six.text_type()여전히 3 을 사용 하는 (희망적으로 적은 수의) 사람들 을 위해 어디에서나 사용할 것인지를 결정해야하기 때문에 . -최소한 정보가 있으므로 선택할 수 있습니다.
dwanderson

3

requests출력물 에 재미있는 숯 증후군이 있었기 때문에 여기에 왔습니다 . 나는 생각했다response.text 제대로 해독 된 문자열을 것이라고 했지만 출력에서 ​​독일 움라우트가 있어야하는 재미있는 이중 문자를 발견했습니다.

턴 아웃 response.encoding어떻게 든 그렇게 비어response 제대로 컨텐츠를 디코딩하는 방법을 알고하지 않았고 단지 ASCII (I 추측)로 처리 하였다.

내 솔루션은 'response.content'로 원시 바이트를 가져 와서 수동으로 적용 decode('utf_8')하는 것이 었습니다. 결과는 schöne Umlaute입니다.

올바르게 디코딩

모피

잘못 해독 된 대

퓌르


2

인간을위한 모든 줄은 u ""를 사용해야합니다.

파이썬 문자열을 다룰 때 다음과 같은 사고 방식이 많은 도움이된다는 것을 알았습니다. 모든 Python 매니페스트 문자열은 u""구문을 사용해야 합니다. ""구문 만 바이트 배열입니다.

강타가 시작되기 전에 설명하겠습니다. 대부분의 파이썬 프로그램 ""은 문자열 을 사용하여 시작합니다 . 그러나 그들은 인터넷에서 문서를 지원해야하므로 사용을 시작 "".decode하고 갑자기이 코드를 해독하는 것에 대한 예외가 발생합니다."" 문자열을 합니다. 이 경우 유니 코드는 바이러스처럼 작동하여 혼란을 초래할 수 있습니다.

그러나 내 규칙을 따르면이 감염이 발생하지 않습니다 (이미 감염 되었기 때문).


bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
kennytm

@KennyTM 좋은 소리! 간단히 말해서 인간을위한 모든 줄은 사용해야합니다 u"".
Frank Krueger

1
종교적으로 유니 코드를 모든 곳에서 사용하려고한다면, 많은 응용 프로그램 (모두는 아님)이 좋은 것입니다. 2.x가 아닌 Python 3.x를 원할 것입니다. 2010 년에 작성된 것은 아니지만 2014 년에는 3.x로 업그레이드하지 못하게하는 대부분의 라이브러리 나 플랫폼에서도 유니 코드를 올바르게 사용할 수 없습니다.
abarnert

1

유니 코드입니다.

사이에 변수를 넣으면 str()정상적으로 작동합니다.

그러나 다음과 같은 두 가지 목록이있는 경우 :

a = ['co32','co36']
b = [u'co32',u'co36']

확인하면 set(a)==set(b)False로 표시되지만 다음과 같이하면

b = str(b)
set(a)==set(b)

이제 결과는 True입니다.


위험, 위험. 인코딩 을 전달하지 않고 유니 코드 ( str()또는 u'€'.encode())를 인코딩해서는 안됩니다 . 문자열에 비 ASCII가 포함 된 경우 사용자는 UnicodeEncodeException을 수신합니다.
Alastair McCormack

3
또한 코드가 작동하지 않습니다. b = str(b)그냥 repr()목록 의 문자열 을 제공합니다 b = "[u'co32', u'co36']". 그때set(a)==set(b) = False
Alastair McCormack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.