문제

나이:

>>> print 'example'
example
>>> print 'exámple'
exámple
>>> print 'exámple'.upper()
EXáMPLE

내가 무엇을 할 필요가 인쇄하려면:

EXÁMPLE

(여기서'a'을 가져옵 accute 악센트,하지만 대문자로 표시됩니다.)

내가 사용하고 Python2.6.

도움이 되었습니까?

해결책

나는 생각으로 간단하 로 변환하 ASCII 처음이다.

 >>> print u'exámple'.upper()
 EXÁMPLE

다른 팁

Python2.x,단지 변환할 문자열을 유니코드를 호출하기 전에 상().를 사용하여 코드에 utf-8 을 포맷에서 이 웹 페이지:

>>> s = 'exámple'
>>> s
'ex\xc3\xa1mple'  # my terminal is not utf8. c3a1 is the UTF-8 hex for á
>>> s.decode('utf-8').upper()
u'EX\xc1MPLE'  # c1 is the utf-16 aka unicode for á

전화 decode 에서 걸리는 그것의 현재 형식을 유니코드입니다.변환할 수 있습니다 다음 그것이 일부 다른 형식으로,같은 utf-8 사용하여 인코딩.는 경우에는 문자에,말,iso-8859-2(체코 등에서,이 경우),을 대신 사용 s.decode('iso-8859-2').upper().

로 내 경우에는 경우,터미널하지 않은 유니코드/utf-8 을 준수하고,당신이 할 수있는 최선에 대한 희망은 하나 육 표현의 문이(광산)로 변환하거나 그것 lossily 사용 s.decode('utf-8').upper().encode('ascii', 'replace'), 결과에서'전?그러나 그의 마음에 드는 예를 들어'.할 수 없는 경우에 당신의 터미널 유니코드 쇼,출력을 작성한 파일에 utf-8 을 형식과 열리는 당신의 마음에 드는 편집기입니다.

첫째,내가 사용하는 파이썬 3.1 이러한 일;중앙 공로를 명확히 바이트에서 문자열을 유니코드 개체입니다.이것은 대부분의 텍스트를 조작보다 훨씬 더 안전하는 데 사용될 경우입니다.무게 수조에 사용자의 질문에 대한 python2.x encoding 문제 u'äbc 컨벤션의 python2.1 단지 실수를;명시적으로 bytesbytearray, 삶이 훨씬 쉬워집니다.

둘째,만약 py3k 은 당신의 맛,다음을 시도와 함께 이동 from __future__ import unicode_literals, 으로,이를 모방 py3k 의 행동에 python2.6 2.7.이 일을 피할 수 있었을 것입서(쉽게 헌)실수를 했을 때 말 print 'exámple'.upper() .기본적으로,이것은에서와 동일 py3k: print( 'exámple'.encode( 'utf-8' ).upper() ).비교 이러한 버전(예 py3k):

print( 'exámple'.encode( 'utf-8' ).upper() )
print( 'exámple'.encode( 'utf-8' ).upper().decode( 'utf-8' ) )
print( 'exámple'.upper() )

첫번째는 기본적으로,당신이 무엇을 했을 때 사용하는 문자열이 벌거벗은 'exámple', 제공해 당신을 인코딩하기 utf-8 (에 따라 BDFL 선언,기본값 설정 인코딩에서 실행 시간은 나쁜 생각하는,그래서 py2 당신을 속이지 말하여 import sys; reload( sys ); sys.setdefaultencoding( 'utf-8' );선물을 위해 더 나은 솔루션 py3k 아래).당신이 볼 때의 출력 이러한 세인:

b'EX\xc3\xa1MPLE'
EXáMPLE
EXÁMPLE

당신이 볼 수 있는 경우 upper() 어에 적용하는 첫 번째 텍스트,그것에 행동 바이트가 아닌 문자입니다.python 용 upper() 는 방법에 바이트를,하지만 그것은 단지에 정의된 US-ASCII 해석의 바이트입니다.utf-8 사용하는 값 8 비트이지만 외부 저희의 ASCII(128 255 까지는 우리가 사용하지 않는 ASCII),그에 의해 영향을 받지 않습 upper(), 그래서 때,우리는 디코딩에 다시 두 번째 라인,우리는 더 낮은 경우 á.마지막으로 세 번째 줄을 그것은 바로,그리고 그렇다,놀람,python 알고 있는 것으로 보이는 Á 은 상부 케이스 편지에 해당하는 á.나는 빠른 테스트하십시오 어떤 문자 python3 으로 변환되지 않습 사이의 상단 및 하단 케이스:

for cid in range( 3000 ):
  my_chr = chr( cid )
  if my_chr == my_chr.upper() and my_chr == my_chr.lower():
    say( my_chr )

perusing 목록을 보여준에 매우 몇 가지 부각의 라틴어,키릴 문자,또는 그리스어 문자;대부분의 출력은 비 유럽 문자와 문장 부호.만 문자를 찾을 수 있는 파이썬은 잘못 가지고 있 Ԥ/ԥ(\u0524,\u0525,'키릴{자본|작은}letter pe 와 디센더'),그만큼 당신이 숙박을 외부의 라틴 확장-X 블록(체크아웃 사람들,그들은 얻을 수 있습니다 놀라움),을 수도 있습니다 실제로 사용하는 방법입니다.물론,지 않았다의 정확성을 확인에 매핑됩니다.

마지막으로,여기에 내가 무엇을 넣어 내 py3k 응용 프로그램 boot 섹션:는 방법을 새롭게 정의 인코딩 sys.stdout 을 보고,와 숫자 참조(NCRs)으로 대체;이는 효과가 있는 것 인쇄를 표준출력이 인 유니코드 인코딩 오류가 있습니다.작업할 때,우분투에서, _sys.stdout.encodingutf-8;동일한 프로그램을 실행 하면 윈도우에서,그것은 뭔가가 될 수 있 같은 기묘한 cp850.출력할 수 있습을 보인 starnge,하지만 응용 프로그램이 실행되는 예외를 발생시키지 않고 이러한 새집 터미널이 있습니다.

#===========================================================================================================
# MAKE STDOUT BEHAVE IN A FAILSAFE MANNER
#-----------------------------------------------------------------------------------------------------------
def _harden_stdout():
  """Ensure that unprintable output to STDOUT does not cause encoding errors; use XML character references
  so any kind of output gets a chance to render in a decipherable way."""
  global _sys_TRM
  _sys.stdout       = _sys_TRM = _sys_io.TextIOWrapper(
    _sys.stdout.buffer,
    encoding        = _sys.stdout.encoding,
    errors          = 'xmlcharrefreplace',
    line_buffering  = true )
#...........................................................................................................
_harden_stdout()

의 또 하나의 조각 조언:시험할 때,시 print repr( x ) 또는 이와 유사한 것을 보여준의 신원 x.모든 종류의 오해를 수 있습니다면 당신은 단지 print x 에 py2 고 x 중 octet string 또는 유니코드 개체입니다.그것은 매우 수수께끼고하는 경향이 많이 발생의 머리를 긁적.내가 말했듯이,이동하려고 적어도 py26 으로서 미래를 가져오는 유니코드 리터럴 주문.

을 닫을 인용하는 견적:"문양 레프코위츠 말한 그것은 최고의 자신의 문서 인코딩:

내가 믿고의 컨텍스트에서 이 토론,이 용어는"문자열" 의미가 없습니다.가 텍스트,그리고 거기 가바이트 지향 데이터(수 있는 아주 잘 나타내는 텍스트,하지만 아직 없 변환하).Python 유형 텍스트가 있습니다.데이터 str.아이디 의"비 Unicode"텍스트만 프로그래밍 오류가 기다리고 있을 겁니다."

업데이트:을 발견 python3 올바르게 변환 ſ 라틴어 소문자 장 S 를 들면 대문자로 표시.깔끔!

가 있다고 생각의 비트는 배경 우리가 누락 여기:

>>> type('hello')
<type 'str'>

>>> type(u'hello')
<type 'unicode'>

로 당신이 사용하는"유니코드"문자열을 대신에"네이티브"문자열,연산자의 위와 같은()가 운영하는 유니코드에서 마음입니다.FWIW,Python3 을 사용하는 유니코드에 의해 기본적으로 차이가 크게 관계가 없다.

로 문서 unicode 하기 strunicode 은 차선에서 다양한 방법으로,많은 라이브러리를 생산 유니코드를 출력하려는 경우;그래서 사용하려고만 unicode 체 문자열에 대한 내부적으로 문제를 해결할 수 있습니다.

그것을 시도하십시오:

s = 'exámple'
print unicode(s).upper()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top