python 인 코딩 문제-파일 인 코딩 형식 과 인 코딩 성명 의 역할

3301 단어 python
참고 글:http://www.jb51.net/article/26543.htm 자신 에 게 유용 한 부분 을 발췌 하여 격식 을 갖 추고 정리 하 였 다.
파일 의 인 코딩 형식 과 인 코딩 성명 의 역할
파일 인 코딩 형식 원본 파일 의 인 코딩 형식 은 문자열 의 성명 에 어떤 작용 을 합 니까?파일 의 인 코딩 형식 은 이 원본 파일 에 설 명 된 문자열 의 인 코딩 형식 을 결정 합 니 다.
예 를 들 어 str='하하'print repr(str)
a.파일 형식 이 utf-8 이면 str 의 값 은'\xe5\x93\\x88\xe5\x93\x88'(하하 의 utf-8 인 코딩)b.파일 형식 이 gbk 이면 str 의 값 은'\xb9\xfe\xb9\xfe\xb9\xfe'(하하 의 gbk 인 코딩)이다.
python 의 문자열 은 하나의 바이트 배열 이기 때문에 a 상황 의 str 를 gbk 인 코딩 콘 솔 에 출력 할 때 어 지 러 운 코드 로 표 시 됩 니 다.그리고 b 상황 에서 str 를 utf-8 인 코딩 콘 솔 에 출력 할 때 도 어 지 러 운 문 제 를 표시 합 니 다.아무것도 없습니다.아마도'\xb9\xfe\xb9\xfe'는 utf-8 디 코딩 으로 표시 하면 공백 일 것 입 니 다.> <
부호화 성명 의 역할
모든 파일 은 맨 위 에 있 는 곳 에서\#coding=gbk 와 유사 한 문구 로 인 코딩 을 설명 하지만 이 성명 은 도대체 무슨 소 용이 있 습 니까?그 전 까지 나 는 그것 의 역할 이 바로 세 가지 라 고 생각한다.
1.원본 파일 에 비 ascii 인 코딩 이 나타 납 니 다.보통 중국어 입 니 다.2.고급 IDE 에서 IDE 는 지정 한 인 코딩 형식 으로 파일 형식 을 저장 합 니 다.3.원본 코드 에서 u'ha'와 같은 성명 을 결정 합 니 다.디 코딩 은 선택 한 디 코딩 형식 입 니 다.예시 보기:
#encoding=gbk

if __name__ == '__main__':

    ss = u'  '
    print repr(ss)
    print 'ss:%s' % ss

이 코드 들 을 utf-8 텍스트 로 저장 하고 실행 하면 무엇 을 출력 할 것 같 습 니까?여러분,첫 번 째 느낌 으로 틀림없이 출력 한 것 은:
u'\u54c8\u54c8'
ss:  

하지만 실제 출력 은:
u'\u935d\u581d\u6431'
ss:   

왜 이러 지?이것 이 바로 인 코딩 성명 이 이상 하 게 되 었 습 니 다.ss=u'하하'를 실행 할 때 전체 과정 은 다음 과 같은 몇 단계 로 나 눌 수 있 습 니 다.1)'하하'의 인 코딩 을 가 져 올 수 있 습 니 다.파일 인 코딩 형식 으로'\xe5\x93\x88'(하하 의 utf-8 인 코딩 형식)2)에서 유 니 코드 인 코딩 으로 전환 할 때 이 전환 과정 에서'\\x5\\\x93\\x88\\x5\\x93\\\x88\\x88'의 디 코딩 은 utf-8 로 디 코딩 하 는 것 이 아니 라 성명 인 코딩 처 에서 지정 한 인 코딩 GBK 로\\x5\\x93\\x88\x93\\x88\x88'을 GBK 로 디 코딩 하여 얻 으 면\\\\\\\\x88\x88\x88\\x88\\\x88\\x88\\x88\\x88\\x88\\x88\\x88\\\x88\\\x88\\\x88\\\x88\\\x88\\\x88\x88\\\x88'을'\\\\\\\\x86\x86\x88'935 d
우 리 는 다음 예 를 다시 분석 하 자.
#encoding:utf-8
if __name__ == '__main__':
    ss = u'  '
    print repr(ss)
    print 'ss:%s' % ss

이 예제 를 이번에 GBK 인 코딩 형식 으로 저장 하고 실행 결 과 는 다음 과 같 습 니 다.
SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb9 in position 0:
invalid start byte

여기 왜 utf 8 디 코딩 오류 가 있 습 니까?지난 예 시 를 생각해 보면 첫 번 째 단 계 를 바 꾸 는 것 은 파일 인 코딩 이 GBK 이기 때문에'하하'인 코딩 은 GBK 인 코딩'\xb9\xfe\xb9\xfe'를 얻 었 습 니 다.두 번 째 단 계 를 진행 하여 유 니 코드 로 바 꿀 때 UTF 8 쌍'\xb9\xfe\xb9\xfe'로 디 코딩 을 합 니 다.utf 8 인 코딩 표(UTF-8 설명 은 문자 인 코딩 노트 참조:ASCII,UTF-8,UNICODE)에 존재 하지 않 기 때문에 상기 오 류 를 보고 합 니 다.

좋은 웹페이지 즐겨찾기