codecs — 코덱 레지스트리와 기본 클래스
codecs — 코덱 레지스트리와 기본 클래스
(소스: Lib/codecs.py)
이 모듈은 표준 파이썬 코덱(인코더·디코더)의 기본 클래스를 정의하고, 코덱과 오류 처리 조회 과정을 관리하는 내부 파이썬 코덱 레지스트리에 접근을 제공해요. 대부분의 표준 코덱은 텍스트 인코딩으로, 텍스트를 bytes로 인코딩하고(그리고 bytes를 텍스트로 디코딩) 하지만, 텍스트→텍스트 또는 bytes→bytes 인코딩을 제공하는 코덱도 있어요. 사용자 정의 코덱은 임의 타입 사이에서 인코딩·디코딩할 수 있지만, 일부 모듈 기능은 텍스트 인코딩이나 bytes로 인코딩하는 코덱에만 국한돼 쓰여요.
본문
인코딩·디코딩 함수
codecs.encode(obj, encoding='utf-8', errors='strict'): encoding에 등록된 코덱으로 obj를 인코딩.errors로 원하는 오류 처리 방식을 설정할 수 있고, 기본 'strict'는 인코딩 오류가ValueError(또는 더 코덱 특정적인 서브클래스, 예:UnicodeEncodeError)를 발생시킨다는 뜻.codecs.decode(obj, encoding='utf-8', errors='strict'): 디코딩. 기본 'strict'는 디코딩 오류가ValueError(또는UnicodeDecodeError)를 발생.codecs.charmap_build(string): 사용자 정의 단일 바이트 인코딩으로 인코딩하기에 적합한 매핑 반환. 최대 256자의 디코딩 테이블을 나타내는 str이 주어지면 컴팩트한 내부 매핑 객체EncodingMap또는 문자 서수→바이트 값을 매핑하는 사전을 반환. 잘못된 입력이면TypeError.
코드 정보 조회
codecs.lookup(encoding, /): 파이썬 코덱 레지스트리에서 코덱 정보를 조회하고CodecInfo객체를 반환. 인코딩은 먼저 레지스트리의 캐시에서, 없으면 정규화된 이름으로 검색돼요. 없는 인코딩이면LookupError.codecs.getencoder(encoding),codecs.getdecoder(encoding): 인코딩을 위한 인코더/디코더 함수를 반환.codecs.getincrementalencoder(encoding),codecs.getincrementaldecoder(encoding): 증분 인코더/디코더를 반환.codecs.getreader(encoding),codecs.getwriter(encoding): 스트림 리더/라이터 팩토리를 반환.codecs.register(search_function)/codecs.unregister(search_function): 사용자 정의 코덱 검색 함수 등록/등록 해제.codecs.register_error(name, error_handler)/codecs.lookup_error(name): 오류 처리기 등록/조회.codecs.strict_errors(exception),codecs.ignore_errors(exception),codecs.replace_errors(exception),codecs.backslashreplace_errors(exception),codecs.xmlcharrefreplace_errors(exception),codecs.namereplace_errors(exception): 내장 오류 처리기 ('strict', 'ignore', 'replace', 'backslashreplace', 'xmlcharrefreplace', 'namereplace').
코덱 기본 클래스 (Codec Base Classes)
class codecs.Codec:encode()와decode()메서드를 정의하는 기본 클래스.CodecInfo의 encode/decode에 대한 기본 구현을 제공.class codecs.IncrementalEncoder/IncrementalDecoder: 증분 인코딩·디코딩을 위한 기본 클래스.encode(input, final=False)/decode(input, final=False),reset(),getstate()/setstate()메서드.class codecs.StreamWriter/StreamReader/StreamReaderWriter/StreamRecoder: 스트림 인코딩·디코딩을 위한 기본 클래스.StreamReader는read(),readline()등,StreamWriter는write()등을 지원해요.StreamRecoder는 바이트와 텍스트 사이를 변환하는 인코딩/디코딩 스트림을 다뤄요.class codecs.StreamReaderWriter(stream, reader, writer, errors='strict'): 읽기·쓰기 모두를 결합.
인코딩과 유니코드
파이썬의 텍스트 인코딩은 텍스트 문자열을 바이트 시퀀스로 변환하고, 대부분 유니코드 표준을 기반으로 해요. 표준 인코딩 목록으로는 ASCII, UTF-8, UTF-16, UTF-32, Latin-1(iso-8859-1), cp1252(Windows), Big5, GBK, Shift_JIS, EUC-JP 등 다양한 코드 페이지와 유니코드 인코딩이 있어요. codecs 모듈은 BOM 처리를 포함한 UTF 계열 인코딩에서 인코딩 검사와 BOM 스니핑을 위해 BOM, BOM_UTF8, BOM_UTF16, BOM_UTF32 상수를 제공해요.
표준 인코딩 (Standard Encodings)
- 파이썬 특정 인코딩:
utf-8-sig(BOM 서명 있는 UTF-8),raw_unicode_escape,unicode_escape,base64_codec,hex_codec,string_escape,rot_13등. - 텍스트 인코딩: 다양한 유니코드·국가별 문자 인코딩.
- 바이너리 변환 (Binary Transforms):
base64,hex등 bytes↔bytes 변환 코덱. - 독립 코덱 함수:
getencoder등으로 얻어 단독으로 쓰는 함수. - 텍스트 변환 (Text Transforms):
rot_13등 텍스트→텍스트 변환.
encodings 패키지
encodings— 인코딩 패키지.encodings.idna— Internationalized Domain Names in Applications (국제화 도메인 이름, IDNA).encodings.mbcs— Windows ANSI 코드 페이지.encodings.utf_8_sig— BOM 서명이 있는 UTF-8 코덱.