2014-01-24 2 views
1

파이썬 3.3에서는 잘린 유니 코드 값인 에서 유니 코드 문자를 다시 작성하고 콘솔에 문자를 인쇄하려고합니다.Python3 : 이스케이프 처리되지 않은 백 슬래시가있는 문자열 만들기

예를 들어 '4E00'부터 '\ u4E00'문자열을 만들고 싶습니다. 나는 시도했다 :

base = '4E00' 
uni = r'\u' + base 
print(uni)  # getting '\u4E00', want: '一' 
print(repr(uni)) # '\\u4E00' 

이 상황에서 '\ u4E00'와 같은 이스케이프 처리되지 않은 문자열을 만드는 방법이 있습니까?

답변

1

사용 :

chr(int(base, 16)) 

는 유니 코드 문자로 16 진수 값을 켭니다.

\u 이스케이프 시퀀스는 문자열 리터럴에서만 작동합니다.

(br'\u' + base.encode('ascii')).decode('unicode_escape') 

하지만 훨씬 더 상세이 필요 이상이다 : 당신은 사용할 수 있습니다.

데모 :

>>> base = '4E00' 
>>> chr(int(base, 16)) 
'一' 
>>> (br'\u' + base.encode('ascii')).decode('unicode_escape') 
'一' 
2

\u 다음에 유니 코드 문자 코드가 오는 것은 문자열 리터럴에있는 것입니다. r'\u' + '4E00'은 하나의 리터럴에 모두 포함되어 있지 않으므로 유니 코드 문자로 특별한 의미가 없습니다. 그것은 단지 6 자의 문자열입니다.

그래서 유니 코드 이스케이프 코드를 파이썬 문자열 리터럴에 표시되는대로 가져 와서 유니 코드 문자로 디코딩하려고합니다.

base = '4E00' 
uni = str(bytes(r'\u' + base, encoding="ascii"), encoding="unicode_escape") 

을하지만 (당신이 이미 유니 코드이기 때문에 bytes 처음으로 변환해야 특히 이후)이 주변의 긴 방법 : 당신은 그렇게 할 수 있습니다. 유니 코드 문자 사양은 16 진수입니다. 따라서 정수로 직접 변환 한 다음 chr()을 사용하여 유니 코드 문자로 변환하십시오.

base = '4E00' 
uni = chr(int(base, 16)) 
관련 문제