stringprep — 인터넷 문자열 준비¶
소스 코드: Lib/stringprep.py
인터넷에서 무언가(가령 호스트 이름)를 식별할 때, 종종 그러한 식별에 대해 “동등” 비교할 필요가 있습니다. 이 비교가 실행되는 정확한 방법은 응용 프로그램 도메인에 따라 달라질 수 있습니다, 예를 들어 대/소문자를 구분하는지 그렇지 않은지. 또한 “인쇄 가능” 문자로만 구성된 식별만 허용하기 위해, 가능한 식별을 제한해야 할 수도 있습니다.
RFC 3454는 인터넷 프로토콜에서 유니코드 문자열을 “준비” 하는 절차를 정의합니다. 문자열을 전선에 전달하기 전에, 준비 절차를 통해 문자열을 처리해서 어떤 정규화된 형식을 갖도록 만듭니다. RFC는 프로파일로 결합할 수 있는 테이블 집합을 정의합니다. 각 프로파일은 사용하는 테이블과 stringprep 절차의 어떤 선택적 부분이 프로파일 일부인지 정의해야 합니다. stringprep 프로파일의 한 가지 예는 국제화된 도메인 이름에 사용되는 nameprep입니다.
stringprep 모듈은 RFC 3454 의 테이블만 노출합니다. 이 테이블들을 딕셔너리나 리스트로 표현하기에는 용량이 너무 크기 때문에, 이 모듈은 내부적으로 유니코드 문자 데이터베이스를 사용합니다. 모듈 소스 코드 자체는 mkstringprep.py 유틸리티를 사용하여 생성되었습니다.
결과적으로, 이 테이블들은 데이터 구조가 아닌 함수로 노출됩니다. RFC에는 두 종류의 테이블이 있습니다. 하나는 집합(set)이고 다른 하나는 매핑(mapping)입니다. 집합의 경우, stringprep 은 매개변수가 해당 집합에 포함되면 True 를 반환하는 “특성 함수”를 제공합니다. 매핑의 경우, 키가 주어지면 관련 값을 반환하는 매핑 함수를 제공합니다. 아래는 모듈에서 사용 가능한 모든 함수의 목록입니다.
- stringprep.in_table_a1(code)¶
code가 tableA.1(유니코드 3.2에서 지정되지 않은 코드 포인트)에 있는지 판별합니다.
- stringprep.in_table_b1(code)¶
code가 tableB.1(일반적으로 아무것도 매핑되지 않습니다)에 있는지 판별합니다.
- stringprep.map_table_b2(code)¶
tableB.2(NFKC와 함께 사용되는 케이스 폴딩용 매핑)에 따라 code의 매핑 된 값을 반환합니다.
- stringprep.map_table_b3(code)¶
tableB.3(정규화가 없는 케이스 폴딩용 매핑)에 따라 code의 매핑 된 값을 반환합니다.
- stringprep.in_table_c11(code)¶
code가 tableC.1.1(ASCII 스페이스 문자)에 있는지 판별합니다.
- stringprep.in_table_c12(code)¶
code가 tableC.1.2(비 ASCII 스페이스 문자)에 있는지 판별합니다.
- stringprep.in_table_c11_c12(code)¶
code가 tableC.1(스페이스 문자, C.1.1과 C.1.2의 합집합)에 있는지 판별합니다.
- stringprep.in_table_c21(code)¶
code가 tableC.2.1(ASCII 제어 문자)에 있는지 판별합니다.
- stringprep.in_table_c22(code)¶
code가 tableC.2.2(비 ASCII 제어 문자)에 있는지 판별합니다.
- stringprep.in_table_c21_c22(code)¶
code가 tableC.2(제어 문자, C.2.1과 C.2.2의 합집합)에 있는지 판별합니다.
- stringprep.in_table_c3(code)¶
code가 tableC.3(개인 사용)에 있는지 판별합니다.
- stringprep.in_table_c4(code)¶
code가 tableC.4(비문자 코드 포인트)에 있는지 판별합니다.
- stringprep.in_table_c5(code)¶
code가 tableC.5(대리 코드)에 있는지 판별합니다.
- stringprep.in_table_c6(code)¶
code가 tableC.6(일반 텍스트에는 부적절)에 있는지 판별합니다.
- stringprep.in_table_c7(code)¶
code가 tableC.7(규범적 표현에는 부적절)에 있는지 판별합니다.
- stringprep.in_table_c8(code)¶
code가 tableC.8(표시 특성 변경 또는 폐지)에 있는지 판별합니다.
- stringprep.in_table_c9(code)¶
code가 tableC.9(문자 태깅)에 있는지 판별합니다.
- stringprep.in_table_d1(code)¶
code가 tableD.1(양방향 특성이 “R”이나 “AL”인 문자)에 있는지 판별합니다.
- stringprep.in_table_d2(code)¶
code가 tableD.2(양방향 특성이 “L”인 문자)에 있는지 판별합니다.