파이썬 3.x는 일부 로케일 (예 : tr_TR.utf8)에 대한 대문자와 소문자 문제를 해결했지만 Python 2.x 분기에는이 기능이 없습니다. https://github.com/emre/unicode_tr/과 같은이 사용에 대한 몇 가지 해결 방법이 있지만 이런 종류의 해결책이 마음에 들지 않았습니다.Python 8 비트 ASCII 문자열을 16 비트 유니 코드로 변환하는 방법
그래서 저는 string.maketrans 메서드를 사용하여 원숭이 패치 유니 코드 클래스에 대해 새로운 upper/lower/capitalize/title 메서드를 구현하고 있습니다.
maketrans의 문제점은 두 줄의 길이가 같아야한다는 것입니다. 가장 가까운 해결책은 "어떻게 1 바이트 문자를 2 바이트로 변환 할 수 있습니까?"입니다.
는참고 : I가 u'İ'
(1 바이트 길이 \의 u0130)를 통과 할 때translate
방법 translate
인수로, 아스키 인코딩을 작동 하는가는 아스키 인코딩 오류 준다.
from string import maketrans
import unicodedata
c1 = unicodedata.normalize('NFKD',u'i').encode('utf-8')
c2 = unicodedata.normalize('NFKD',u'İ').encode('utf-8')
c1,len(c1)
('\xc4\xb1', 2)
# c2,len(c2)
# ('I', 1)
'istanbul'.translate(maketrans(c1,c2))
ValueError: maketrans arguments must have same length
'string.maketrans()'경우에도, 바이트 지향, 그래서 당신이 일하는 것이 무엇을 원하는 생각하지 않는다 8 비트 ASCII 문자를 16 비트 유니 코드로 변환하는 방법을 찾을 수 있습니다. – martineau
당신은 8 비트 ASCII에서 16 비트 유니 코드로의 변환을 말하고 싶습니다. – guneysus
@guneysus : 파이썬에서 제목의 질문에 대한 답은'unicode_text = ascii_bytestring.decode ('ascii')'입니다. "16 비트 유니 코드"는 매우 가난한 용어입니다. UCS-2 ("좁은"CPython 2 빌드의 유니 코드 문자열) 또는 UTF-16 인코딩을 사용하여 인코딩 된 텍스트 또는 BMP의 유니 코드 코드 포인트 또는 "16 비트 "무시하고 파이썬 유니 코드 문자열을 가정해야합니다 (내가했던 것처럼)? – jfs