# `stringprep` — 인터넷 문자열 준비

소스 코드: Lib/stringprep.py

인터넷에서 무언가(가령 호스트 이름)를 식별할 때, 종종 그러한 식별에 대해 “동등” 비교할 필요가 있습니다. 이 비교가 실행되는 정확한 방법은 응용 프로그램 도메인에 따라 달라질 수 있습니다, 예를 들어 대/소문자를 구분하는지 그렇지 않은지. 또한 “인쇄 가능” 문자로만 구성된 식별만 허용하기 위해, 가능한 식별을 제한해야 할 수도 있습니다.

RFC 3454는 인터넷 프로토콜에서 유니코드 문자열을 “준비” 하는 절차를 정의합니다. 문자열을 전선에 전달하기 전에, 준비 절차를 통해 문자열을 처리해서 어떤 정규화된 형식을 갖도록 만듭니다. RFC는 프로파일로 결합할 수 있는 테이블 집합을 정의합니다. 각 프로파일은 사용하는 테이블과 `stringprep` 절차의 어떤 선택적 부분이 프로파일 일부인지 정의해야 합니다. `stringprep` 프로파일의 한 가지 예는 국제화된 도메인 이름에 사용되는 `nameprep`입니다.

The module `stringprep` only exposes the tables from RFC 3454. As these tables would be very large to represent as dictionaries or lists, the module uses the Unicode character database internally. The module source code itself was generated using the `mkstringprep.py` utility.

결과적으로, 이러한 테이블은 데이터 구조가 아닌 함수로 노출됩니다. RFC에는 두 종류의 테이블이 있습니다: 집합과 매핑. 집합의 경우, `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”인 문자)에 있는지 판별합니다.