문제
Python,문자열 수 있습니코드(모두 utf-16,utf-8)및 싱글-다른 바이트 인코딩(cp1251,cp1252etc.).체크인은 가능한 인코딩은 무엇이 문자열입니까?예를 들어,
time.strftime( "%b" )
이 문자열을 반환하는 텍스트 이름입니다.MacOS 에서 반환된 문자열됩 utf-16,Windows 영어 로컬 것이 하나의 byte ascii 인코딩,윈도우에서 비 영어캘 될 것이다 인코딩을 통해 해당 국가의 코드페이지,예를 들어 cp1251.나는 어떻게 처리 등의 문자열?
해결책
문자열을 저장하지 않는 모든 정보를 인코딩을 지정할 때 하나로 변환하여/에서는 유니코드하거나 인쇄하는 출력 장치:
import locale
lang, encoding = locale.getdefaultlocale()
mystring = u"blabla"
print mystring.encode(encoding)
UTF-8 지 유니코드를,그것은 유니코드 인코딩으로 하나의 바이트는 문자열입니다.
하는 것이 가장 좋습니다 유니코드에 모든 곳에서는 파이썬 측 저장할 문자열과 함께는 유니코드 인코딩을 가역과 같은 UTF-8,변환 멋진 곳에 대해서만 사용자가 출력됩니다.
다른 팁
charset 인코딩 검색은 매우 복잡합니다.
그러나,당신의 목적에 대한 이?하려는 경우에는 값에는 유니코드,단순히 작성
unicode(time.strftime("%b"))
그리고 그것은 작동에 대한 모든 경우에 당신은 위에서 언급:
- mac os:유니코드(유니코드)->유니코드
- win/eng:유니코드(ascii)->유니코드
- win/noneng:유니코드(some_cp)->로 변환됩니다에 의해 현지 cp->유니코드
이 있는 경우 합리적으로 긴 문자열에는 알 수 없는 인코딩을 시도할 수 있습니다 추측하고 인코딩 예보편적인 인코딩 감지기에 https://github.com/dcramer/chardet --고장이 없지 않지만,때때로 그것은 바로 추측;-).하지만 많은 도움이되지 않습으로 매우 짧은 문자열입니다.