STR과 UNICODE에 관한 좋은 글
Python 코딩 관련 내용 정리
참고: 다음 논의는 Python2.x 버전에 대한 것이며, Py3k는 시도해볼 예정입니다
시작
파이썬을 사용해 중국어를 처리할 때 파일이나 메시지, http 매개변수 등을 읽을 때
실행하자마자 문자가 깨져요. (문자열 처리, 읽기, 파일 쓰기, 인쇄)
그러면 대부분의 사람들이 하는 일은 왜곡된 문자가 나타나는 이유를 명확히 생각하지 않고 디버깅을 위해 인코딩/디코딩을 호출하는 것입니다
그래서 디버깅 중 가장 일반적인 오류
오류 1
추적(가장 최근 호출 마지막): 파일 "
오류 2
추적(가장 최근 호출 마지막): 파일 "
우선
일반적인 개념, 문자셋, 문자 인코딩에 대한 이해가 있어야 합니다
ASCII | -8 | 등
문자 인코딩 참고 사항: ASCII, 유니코드 및 UTF-8
Taobao 검색 기술 블로그 - 중국어 코딩 토크
str 및 유니코드
str과 unicode 모두 basestring
의 하위 클래스이므로 문자열인지 확인하는 방법이 있습니다
def is_str(s) : isinstance(s, basestring) 반환
str 및 유니코드 변환
문서 디코딩
문서 인코딩
str -> decode('the_coding_of_str') -> unicode -> encode('the_coding_you_want') -> str
str은 유니코드로 인코딩된 바이트 문자열입니다.
바이트로 구성된 선언 방법s = '중국어' s = u'中文'.encode('utf-8' ) >>> type( '중국어')
길이 찾기(바이트 수 반환)
>>> u'中文'.encode('utf-8') 'xe4xb8xadxe6x96x87' >>> len(u'中文'.encode('utf-8')) 6
유니코드만 문자로 구성된 진정한 의미의 문자열입니다.
선언 방법
s = u'中文' s = '中文'.decode('utf -8') s = unicode('중국어', 'utf-8') >>> type(u'중국어') <'unicode'> ;
논리에서 실제로 사용하고 싶은 길이(문자 수 반환)를 찾으세요
>>>中文' u'u4e2du6587' >>> len(u' Chinese') 2
결론
원하는지 알아보세요 str이나 유니코드를 처리하고, 그에 맞는 처리방법(str.decode/unicode .encode)을 사용하세요
다음은 유니코드/str인지 확인하는 방법입니다>> > isinstance(u'中文', unicode) 참 >>> isinstance(' 중국어', unicode) 거짓 >>> isinstance('중국어', str) 참 >>> u'中文', str) False간단한 원칙: str에는 encode를 사용하지 말고, unicode에는 decode를 사용하지 마십시오(실제로 str을 인코딩할 수 있습니다. 자세한 내용은 끝을 참조하세요. 단순성을 보장하므로 권장되지 않습니다)
다른 인코딩 변환, 중간 인코딩으로 유니코드 사용
#s는 code_A의 str s입니다. decode('code_A').encode('code_B')
파일 처리, IDE 및 콘솔
파일 읽기, 외부 입력 인코딩, 유니코드로 디코딩, 처리(내부 인코딩, 통합 유니코드), 필수 대상 인코딩으로 인코딩, 대상 출력(파일 또는 콘솔)에 쓰기
IDE 및 제어 그 이유는 인쇄 시 인코딩이 IDE 자체 인코딩과 일치하지 않아
이 발생하기 때문입니다. 출력 시 인코딩을 일치시키는 것으로 변환하면
>>> u '中文'.encode('gbk') ???? >>> u'中文'.encode('utf-8') 中文
인코딩 표준화를 권장합니다
인코딩 표준화
인코딩을 통합하여 코드가 깨지는 것을 방지합니다. 특정 링크
환경 코딩, IDE/텍스트 편집기, 파일 코딩, 데이터베이스 테이블 코딩
코드 소스 파일 코딩 보장
매우 중요합니다
py 파일의 기본 인코딩은 ASCII입니다. 소스 코드 파일에서 ASCII가 아닌 문자를 사용하는 경우 인코딩 선언이 필요합니다. 선언하지 않은 경우 비ASCII를 입력하면 발생하는 오류는 파일의 첫 번째 또는 두 번째 줄에 배치되어야 합니다. 파일 "XXX.py" , 3행 SyntaxError: 3행의 c.py 파일에 비ASCII 문자 'xd6'이 있지만 인코딩이 선언되지 않았습니다. 자세한 내용은 http://www.php.cn/을 참조하세요.선언 방법
# -*- 코딩: utf-8 -*- 또는 #coding=utf-8
처리 순서
1. 초기 디코딩 2. 모든 곳에서 유니코드 3. 나중에 인코딩>>> import sys >>> ' ascii'>> ; reload(sys)
>> > u'中' u'u4e2d' >>> s = 'u4e2d' >>> >>> \u8282\u70b9\u72b6\u6001\u6210\u529f' > >> a.decode('unicode_escape') u'u4feeu6539u8282u70b9u72b6u6001u6210u529f'
위 내용은 Python 인코딩에 대한 정보 수집 앞으로도 관련 정보를 계속 추가하겠습니다. 이 사이트에 대한 귀하의 지원에 감사드립니다!
더 많은 Python 인코딩 처리-str 및 유니코드 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!