stringprep — 인터넷 문자열 준비
stringprep — 인터넷 문자열 준비 (Internet String Preparation)
인터넷에서 호스트 이름 같은 대상을 식별할 때, 이 식별자들을 서로 비교해서 "같음"을 판정해야 하는 일이 많아요. 그 비교를 정확히 어떻게 할지는 응용 영역에 따라 달라질 수 있고요 — 예를 들어 대소문자를 무시할지 말지 같은 것 말이죠. 또 식별자를 "인쇄 가능한" 문자들로만 제한해야 하는 경우도 있어요.
RFC 3454는 인터넷 프로토콜에서 유니코드 문자열을 "준비(prepare)"하는 절차를 정의해요. 문자열을 네트워크로 보내기 전에 이 준비 절차로 처리하면, 처리 후에는 특정한 정규화된 형태를 갖게 되죠. 이 RFC는 테이블들의 집합을 정의하고, 이 테이블들을 조합해서 프로파일(profile)을 만들 수 있어요. 각 프로파일은 어떤 테이블을 쓰는지, 그리고 stringprep 절차의 어떤 선택적 부분을 포함할지를 정의해야 합니다. stringprep 프로파일의 한 예가 국제화 도메인 이름에 쓰이는 nameprep이에요.
stringprep 모듈은 RFC 3454의 테이블들만 노출해요. 이 테이블들을 딕셔너리나 리스트로 표현하면 너무 커지기 때문에, 이 모듈은 내부적으로 유니코드 문자 데이터베이스를 사용해요. 모듈 소스 코드 자체는 mkstringprep.py 유틸리티로 생성된 것이고요.
그 결과, 이 테이블들은 데이터 구조가 아니라 함수로 노출돼요. RFC에는 두 종류의 테이블이 있는데, 바로 집합(set)과 매핑(mapping)이에요. 집합에 대해서는 stringprep가 "특성 함수"(파라미터가 그 집합의 일부면 True를 반환하는 함수)를 제공하고, 매핑에 대해서는 키를 주면 연관된 값을 반환하는 매핑 함수를 제공해요. 아래는 모듈에서 쓸 수 있는 모든 함수의 목록이에요.
출처: Python 표준 라이브러리
본문
stringprep.in_table_a1(code)—code가 표 A.1(Unicode 3.2에서의 미할당 코드 포인트)에 속하는지 판정해요.stringprep.in_table_b1(code)—code가 표 B.1(보통 아무것에도 매핑되지 않음)에 속하는지 판정해요.stringprep.map_table_b2(code)— 표 B.2(NFKC와 함께 쓰는 대소문자 접기용 매핑)에 따라code의 매핑 값을 반환해요.stringprep.map_table_b3(code)— 표 B.3(정규화 없이 쓰는 대소문자 접기용 매핑)에 따라code의 매핑 값을 반환해요.stringprep.in_table_c11(code)—code가 표 C.1.1(ASCII 공백 문자)에 속하는지 판정해요.stringprep.in_table_c12(code)—code가 표 C.1.2(비-ASCII 공백 문자)에 속하는지 판정해요.stringprep.in_table_c11_c12(code)—code가 표 C.1(C.1.1과 C.1.2의 합집합인 공백 문자)에 속하는지 판정해요.stringprep.in_table_c21(code)—code가 표 C.2.1(ASCII 제어 문자)에 속하는지 판정해요.stringprep.in_table_c22(code)—code가 표 C.2.2(비-ASCII 제어 문자)에 속하는지 판정해요.stringprep.in_table_c21_c22(code)—code가 표 C.2(C.2.1과 C.2.2의 합집합인 제어 문자)에 속하는지 판정해요.stringprep.in_table_c3(code)—code가 표 C.3(사용자 정의 영역, private use)에 속하는지 판정해요.stringprep.in_table_c4(code)—code가 표 C.4(비-문자 코드 포인트)에 속하는지 판정해요.stringprep.in_table_c5(code)—code가 표 C.5(서로게이트 코드)에 속하는지 판정해요.stringprep.in_table_c6(code)—code가 표 C.6(일반 텍스트에 부적절한 문자)에 속하는지 판정해요.stringprep.in_table_c7(code)—code가 표 C.7(정규 표현에 부적절한 문자)에 속하는지 판정해요.stringprep.in_table_c8(code)—code가 표 C.8(표시 속성을 바꾸거나 폐기된 문자)에 속하는지 판정해요.stringprep.in_table_c9(code)—code가 표 C.9(태깅 문자)에 속하는지 판정해요.stringprep.in_table_d1(code)—code가 표 D.1(양방향 속성이 "R" 또는 "AL"인 문자)에 속하는지 판정해요.stringprep.in_table_d2(code)—code가 표 D.2(양방향 속성이 "L"인 문자)에 속하는지 판정해요.
더 알아보기
- RFC 3454 — 인터넷 프로토콜을 위한 유니코드 문자열 준비 절차의 원문.