44

전역 적으로 파이썬에서 유니 코드 문자열 표시기를 억제하는 방법이 있습니까? 나는 응용 프로그램에서 유니 코드와 독점적으로 일하고, 많은 대화 형 작업을 수행합니다. 모든 디버그 출력에 u'prefix가 표시되는 것은 불필요하고 불쾌합니다. 그것을 끌 수 있습니까?

11 답변


40

파이썬 3.0을 사용할 수 있습니다. 기본 문자열 유형은 유니 코드이므로,u''접두사는 더 이상 필요하지 않습니다 ..

간단히 말해서, 아니오. 이 기능을 끌 수 없습니다.

그만큼u~에서 온다.unicode.__repr__메서드를 사용하여 REPL에 내용을 표시합니다.

>>> print repr(unicode('a'))
u'a'
>>> unicode('a')
u'a'

내가 잘못 본 것이 아니라면 파이썬을 다시 컴파일하지 않고서는 이것을 덮어 쓸 수 없다.

이 문제를 해결하는 가장 간단한 방법은 단순히 문자열을 인쇄하는 것입니다.

>>> print unicode('a')
a

귀하가unicode()내장 문자열로 모든 문자열을 구성 할 수 있습니다.

>>> class unicode(unicode):
...     def __repr__(self):
...             return __builtins__.unicode.__repr__(self).lstrip("u")
... 
>>> unicode('a')
a

..하지만 그렇게하지 마라, 그것은 끔찍한 일이다.


  • 이것은 모든 솔루션만큼 좋은 해결책입니다. 진짜 대답은 그것을 빨아 먹는 것입니다! - Ryan
  • +1 날 파이썬 배우는 3 문자열은 기본적으로 모든 유니 코드입니다 - notbad.jpeg

26

내가 html 템플릿의 일부로 파이썬으로 일부 자바 스크립트를 설정했기 때문에 나는 u 프리픽스를 놓을 필요가있는 경우가있었습니다. 간단한 출력은 예를 들어 dict 키에 대해 u 접두사를 남겨 둡니다.

var turns = [{u'armies':2...];

어떤 자바 스크립트를 깰.

필요한 자바 스크립트를 얻으려면 json python 모듈을 사용하여 문자열을 인코딩해야합니다.

turns = json.dumps(turns)

이것은 내 특별한 경우에 트릭을 수행하며 키가 모두 ascii이므로 인코딩에 대해 걱정할 필요가 없습니다. 이 트릭을 디버그 출력에 사용할 수 있습니다.


  • Brilliant, json.dumps ()입니다.재귀적인repr ()과 같습니다. 하나의주의 사항,사전 키int에서 str로 변환됩니다.assert '{"3": 5}' == json.dumps({3:5})(JavaScript 객체 속성식별자모든 문자열입니다.) - Bob Stein

7

~을 사용하여str( text )실제로 파이썬의 기본 인코딩과 문자열의 정확한 내용에 대해 100 % 확신 할 수 없을 때마다 다소 나쁜 생각입니다. 후자는 인터넷에서 가져온 텍스트에 일반적으로 사용됩니다. 또한, 당신이하고 싶은 것에 따라,print text.encode( 'utf-8' )또는print repr( text.encode( 'utf-8' ) )읽을 수없는 코드 포인트로 가득 찬 렌더링을 얻을 수 있기 때문에 실망스러운 결과를 가져올 수 있습니다.\x3a.

나는 최적이라고 생각하는 것은 유니 코드 가능 명령 행 (Windows에서는 어렵고 리눅스에서는 쉽지 않음)을 사용하고 파이썬 2.x에서 파이썬 3.x로 전환하는 것이다. 텍스트의 용이성과 선명도 및 새로운 파이썬 3 시리즈에 의해 제공되는 바이트 처리는 실제로 당신이 기대할 수있는 큰 이득 중 하나입니다. '바이트'와 '텍스트'의 구분을 배우고 문자 인코딩의 개념을 이해하는 데 약간의 시간을 소비해야한다는 것을 의미하지만, 그 시간은 파이썬 3의 환경에서 이들에 대한 새로운 승인으로 사용하는 것이 훨씬 낫습니다. 애매 모호한 문제는 파이썬 2가 제공해야했던 것보다 훨씬 명확하고 훨씬 오류가 적습니다. 나는 파이썬 2의 접근 방식을 유니 코드에 대한 회상에서 문제가 있다고 부르기까지했다. 비록 내가 그것을 우수하다고 생각 하긴했지만 --- 나는 그것을방법이 문제는 PHP에서 처리됩니다.

편집하다방금 들렀다.관련 토론여기에 그래서이 요즘 유니 코드 / 인코딩 문제를 해결하기 위해 나타나는 PHP에이 의견을 발견 :

그것은 먹는 것을 시도하는 쥐 같이이다   코끼리. 유니 코드를   ASCII의 확장 (정상적인   문자열이 있고 mb_strings이 있습니다.)   상황을 잘못 잡아 먹는다.   특수한 경우에 매달린다.   캐릭터를 다루는 데 필요한   재미있는 squiggles 이상이 필요합니다.   1 바이트. 유니 코드를 다음과 같이 취급하는 경우   모든 사람들에게 추상적 인 공간을 제공한다.   필요한 문자, ASCII는   필요없이 수용했다.   특별한 경우로 취급합니다.

왜냐하면 내 경험에 의하면 파이썬 + 유니 코드 주제가 ascii 나 latin-1과 잘 어울린 사람들로부터 온 것 같아서 평소의 설정에서는 지원되지 않는 가끔 인물에 물린 것이므로, 기본적으로 그냥 제거하고 싶습니다. 파이썬 3으로 전환 할 때 위의 주석자가 제안한 것과 정확히 똑같습니다. 유니 코드를 아스키의 확장 기능으로 보는 대신, ascii (그리고 거의 모든 다른 인코딩을 볼 수 있습니다)를 하위 집합으로 봅니다. ) 유니 코드의.

사실이라면, 유니 코드 v6은 확실히 인코딩의 마지막 단어는 아니지만, 2011 년에 얻을 수있는 것만큼이나 보편적 인 것입니다. 익숙해 져야합니다.


7

from __future__ import unicode_literals

Python 2.6부터 사용할 수 있습니다 (2008 년 10 월 1 일에 릴리스 됨). 이것은 파이썬 3에서 디폴트이다.

생략 할 수 있습니다.u''소스 코드에 접두어가 붙지 만 변경되지 않습니다.repr(unicode_string)그것은 오도 할 것입니다.

너는 무시할 수있어.sys.displayhook()파이썬 REPL에서 객체를 표시 할 수 있습니다. 또한 재정의 할 수도 있습니다.__repr__사용자 지정 개체 용.


  • ...에서미래unicode_literals 가져 오기, 파이썬 2.7 inpython 콘솔에서 작동하지 않습니다. - Alex Luya
  • @AlexLuya는 작동합니다 (예, 확인을 시도했습니다.). 시험type("")새로운 Python REPL에서<type 'str'>. 그런 다음 실행 :from __future__ import unicode_literals반복type(""). 이제 너는보아야한다.<type 'unicode'>. 당신의 환경은 무엇입니까 (OS, 파이썬 버전)? - jfs
  • 우분투 + ipython + 파이썬 2.7 - Alex Luya
  • "nltk.corpus from stop stopwords"를 수신하면, "stopword.words ("english ")", "" " " 39; 접두어가 붙을 때까지이다. - Alex Luya
  • @AlexLuya 그것은 나를 위해 작동하고 명시 적으로 그것이 작동해야한다 :" 대화식 인터프리터 프롬프트에서 입력 된 향후 명령문은 나머지 인터프리터 세션에 적용됩니다. " - jfs

4

이 전역 옵션이 아니지만 str () 함수에 문자열을 배치하여 유니 코드 u를 억제 할 수도 있습니다.

유니 코드에서 파생 된 목록은 다음과 같습니다.

>>> myList=[unicode('a'),unicode('b'),unicode('c')]
>>> myList
[u'a', u'b', u'c']

이 될 것이다 :

>>> myList=[str(unicode('a')),str(unicode('b')),str(unicode('c'))]
>>> myList
['a', 'b', 'c']

약간 성가 시긴하지만 어떤 사람에게는 유용 할 수 있습니다.


  • 오 이런! 이 ' 어레이 ' 문자열 생성. - itsricky
  • 나는이 데이터를 파싱을 위해 PHP로 핸드볼하려고하는데, PHP에서이 변환을 처리하려고 혼란 스럽다. 나는 내 인생의 2 년을 확실하게 잃었다. 나는 stories.append (word) '를 사용하고 있었지만, 이것을 당신의 마법의 story.append (str (unicode (word)))로 변경했습니다. 그리고 그것의 모든 정렬. 찬란한 @electrice! - itsricky
  • 어, 절대적으로 ** 그렇게하지 마십시오 ** - ASCII가 아닌 데이터로 인해 충돌이 발생하고 처음에는 유니 코드 사용의 모든 목적을 상실합니다. 당신이 필요하지 않은 것에 의존한다면u어딘가에, 당신은 끔찍한 잘못을 저 지르고 있습니다. @itsricky, PHP에서 Python reprs를 구문 분석하지 않고 JSON으로 인코딩하려고합니다. - Eevee
  • 나는 나의 UPVOTE 한계에 도달했다. 그러나 나는 당신에게 Electrice에게 감사해야했다! !! - Mona Jalal
  • 작품, 대단한 !!! - gsamaras

4

만약 당신이 이런 식으로 뭔가를 얻고있다면u['hello']배열을 인쇄해야합니다. 인쇄str(arr[0])너는 잘 가라.


3

유니 코드는 확실하지 않지만 일반적으로 전화를 걸 수 있습니다.str.encode()더 적합한 형식으로 변환하십시오. 예를 들어, 파이썬 3.0+에서 캡쳐 된 서브 프로세스 출력은 그것을 바이트 스트림 (접두사 'b')으로 캡쳐하고, encode ()는 일반적인 문자열 형식으로 수정합니다.


3

나를 위해 일하는 것 같습니다.

import ast
import json
j = json.loads('{"one" : "two"}')
j
dd = {u'one': u'two'}
dd
#to get double quotes
json.dumps(j,  encoding='ascii')
json.dumps(dd, encoding='ascii')
#to get single quotes
str(ast.literal_eval(json.dumps(j,  encoding='ascii')))
str(ast.literal_eval(json.dumps(dd, encoding='ascii')))

산출:

>>> {u'one': u'two'}
>>> {u'one': u'two'}
>>> '{"one": "two"}'
>>> '{"one": "two"}'
>>> "{'one': 'two'}"
>>> "{'one': 'two'}"

위의 내용은 사전 및 JSON 객체에 대해 자명 한 것으로서 작동합니다.

그냥 문자열에 대한 str () 래핑 나를 위해 작동하는 것.

s=u'test string'
s
str(s)

산출:

>>> u'test string'
>>> 'test string'

Python 버전 : 2.7.12


1

다음을 시도해보십시오.

print str (result.url)

기본 인코딩이 변경되었을 수 있습니다.

다음과 같이 기본 인코딩을 확인할 수 있습니다.

> import sys
> print sys.getdefaultencoding()
> ascii

기본값은 ascii 여야합니다. u'string '이'string '으로 인쇄되어야하지만 사용자가 수정되었을 수 있습니다.


  • 완전한! 감사. - Nik
  • @ 니콜 :이 질문에 대한 답변이 있으면, 그것을 정답으로 표시하십시오. - XORcist

1

너는 사용해야 해.print str(your_Variable)


1

파이썬 3으로 업데이트하고 싶지 않은 경우 부분 문자열을 사용할 수 있습니다. 예를 들어 원래 출력이 (u'mystring ',)라고 가정 해보십시오. 이 예제에서 변수 행에 유니 코드 접두어가없는 "mystring"문자열이 있다고 가정합니다. 그렇다면 다음과 같이하면됩니다.

temp = str(row); #str is not necessary, but probably good practice
temp = temp[:-3];
print = temp[3:];

연결된 질문


관련된 질문

최근 질문