ASCII 문자열을 유니 코드로 어떻게 처리하고 파이썬에서 탈출 한 문자를 탈출하지 않습니까?

StackOverflow https://stackoverflow.com/questions/267436

  •  06-07-2019
  •  | 
  •  

문제

예를 들어, 내가있는 경우 유니 코드 문자열, 나는 그것을 인코딩 할 수 있습니다 ASCII So :

>>> u'\u003cfoo/\u003e'.encode('ascii')
'<foo/>'

그러나 나는 이것을 가지고있다 ASCII 끈:

'\u003foo\u003e'

... 나는 똑같이 바꾸고 싶다 ASCII 위의 첫 번째 예에서와 같이 문자열 :

'<foo/>'
도움이 되었습니까?

해결책

이것을 알아내는 데 시간이 걸렸지 만 이 페이지 최고의 답변이있었습니다 :

>>> s = '\u003cfoo/\u003e'
>>> s.decode( 'unicode-escape' )
u'<foo/>'
>>> s.decode( 'unicode-escape' ).encode( 'ascii' )
'<foo/>'

유니 코드 문자열을 지정하는 다른 방법을 처리하는 '원시-유니 코드-에스케이프'코덱도 있습니다. 링크 된 페이지의 "유니 코드 생성자"섹션을 확인하십시오.

편집 : 참조하십시오 파이썬 표준 인코딩.

다른 팁

Ned Batchelder 말했다:

문자열이 어디에서 왔는지에 따라 약간 위험하지만 다음과 같습니다.

>>> s = '\u003cfoo\u003e'
>>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii')
'<foo>'

실제로이 방법은 다음처럼 안전하게 만들 수 있습니다.

>>> s = '\u003cfoo\u003e'
>>> s_unescaped = eval('u"""'+s.replace('"', r'\"')+'-"""')[:-1]

3 인용 바로 직전에 트리플 쿼트 문자열과 대시를 염두에 두십시오.

  1. 3 인용 문자열을 사용하면 사용자가 문자열에 ' "'(시각적 선명도를 위해 추가)를 입력하면 평가자를 방해하지 않도록합니다.
  2. 끝의 대시는 사용자의 문자열이 ' "'로 끝나는 경우에 안전한 안전입니다. 결과를 할당하기 전에 삽입 된 대시를 [: -1

따라서 원시 형식으로 캡처되는 한 사용자가 입력 한 내용에 대해 걱정할 필요가 없습니다.

Python 2.5에서 올바른 인코딩은 "Unicode-Escape"가 아닌 "unicode_escape"입니다 (밑줄 참고).

최신 버전의 Python이 유니 코드 이름을 변경했는지 확실하지 않지만 여기에서는 밑줄과 함께 작동했습니다.

어쨌든,이게 다야.

어느 시점에서 당신은 문자열에서 한자 나 이모티콘과 같은 특수 문자를 만나면 다음과 같이 보이는 오류를 해독하려는 문제가 발생합니다.

UnicodeEncodeError: 'ascii' codec can't encode characters in position 109-123: ordinal not in range(128)

내 사례 (트위터 데이터 처리)의 경우 오류없이 모든 문자를 볼 수 있도록 다음과 같이 디코딩했습니다.

>>> s = '\u003cfoo\u003e'
>>> s.decode( 'unicode-escape' ).encode( 'utf-8' )
>>> <foo>

문자열이 어디에서 왔는지에 따라 약간 위험하지만 다음과 같습니다.

>>> s = '\u003cfoo\u003e'
>>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii')
'<foo>'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top