stringprep — 인터넷 문자열 준비

stringprep — 인터넷 문자열 준비

인터넷에서 호스트 이름과 같은 대상을 식별할 때, 그러한 식별자를 "동등한지" 비교해야 하는 경우가 많습니다. 이 비교가 정확히 어떻게 수행되는지는 응용 도메인에 따라 달라질 수 있습니다. 예를 들어 대소문자를 구분하지 않아야 하는지 여부에 따라 다릅니다. 또한 "인쇄 가능한" 문자로만 구성된 식별자만 허용하도록 가능한 식별자 집합을 제한해야 할 수도 있습니다.

출처: Python documentation

본문

RFC 3454는 인터넷 프로토콜에서 유니코드 문자열을 "준비(prepare)"하는 절차를 정의합니다. 문자열을 네트워크로 보내기 전에 준비 절차로 처리하며, 그 후에는 특정 정규화된 형태를 갖습니다. RFC는 프로파일로 결합할 수 있는 테이블 집합을 정의합니다. 각 프로파일은 어떤 테이블을 사용하는지, 그리고 stringprep 절차의 어떤 다른 선택적 부분이 프로파일에 포함되는지 정의해야 합니다. stringprep 프로파일의 한 예는 국제화 도메인 이름에 사용되는 nameprep입니다.

stringprep 모듈은 RFC 3454의 테이블만 노출합니다. 이 테이블들은 사전이나 목록으로 표현하기에는 너무 크기 때문에, 모듈은 내부적으로 유니코드 문자 데이터베이스를 사용합니다. 모듈 소스 코드 자체는 mkstringprep.py 유틸리티를 사용하여 생성되었습니다.

결과적으로 이 테이블들은 데이터 구조가 아니라 함수로 노출됩니다. RFC에는 집합(set)과 매핑(mapping)이라는 두 종류의 테이블이 있습니다. 집합의 경우 stringprep은 "특성 함수(characteristic function)", 즉 매개변수가 집합의 일부이면 True를 반환하는 함수를 제공합니다. 매핑의 경우 키가 주어지면 연관된 값을 반환하는 매핑 함수를 제공합니다. 아래는 모듈에서 사용할 수 있는 모든 함수의 목록입니다.

  • 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) — 표 C.1.1(ASCII 공백 문자)에 있는지 결정합니다.
  • stringprep.in_table_c12(code) — 표 C.1.2(비-ASCII 공백 문자)에 있는지 결정합니다.
  • stringprep.in_table_c11_c12(code) — 표 C.1(C.1.1과 C.1.2의 합집합인 공백 문자)에 있는지 결정합니다.
  • stringprep.in_table_c21(code) — 표 C.2.1(ASCII 제어 문자)에 있는지 결정합니다.
  • stringprep.in_table_c22(code) — 표 C.2.2(비-ASCII 제어 문자)에 있는지 결정합니다.
  • stringprep.in_table_c21_c22(code) — 표 C.2(제어 문자, C.2.1과 C.2.2의 합집합)에 있는지 결정합니다.
  • stringprep.in_table_c3(code) — 표 C.3(사용자 정의(private use))에 있는지 결정합니다.
  • stringprep.in_table_c4(code) — 표 C.4(비문자 코드 포인트)에 있는지 결정합니다.
  • stringprep.in_table_c5(code) — 표 C.5(서로게이트 코드)에 있는지 결정합니다.
  • stringprep.in_table_c6(code) — 표 C.6(일반 텍스트에 부적합)에 있는지 결정합니다.
  • stringprep.in_table_c7(code) — 표 C.7(정규 표현에 부적합)에 있는지 결정합니다.
  • stringprep.in_table_c8(code) — 표 C.8(표시 속성을 변경하거나 폐기됨)에 있는지 결정합니다.
  • stringprep.in_table_c9(code) — 표 C.9(태깅 문자)에 있는지 결정합니다.
  • stringprep.in_table_d1(code) — 표 D.1(양방향 속성이 "R" 또는 "AL"인 문자)에 있는지 결정합니다.
  • stringprep.in_table_d2(code) — 표 D.2(양방향 속성이 "L"인 문자)에 있는지 결정합니다.

더 알아보기 (Learn more)