Python 3.12 쿼리의 세미콜론: parse_qs 기본 구분자는 &입니다

Python 3.12의 parse_qs 기본 구분자는 &입니다. 쿼리 안에 세미콜론이 있다고 자동으로 다음 항목으로 나뉘지 않으며, separator를 세미콜론으로 바꾸면 이번에는 &를 같은 방식으로 나누지 않습니다.
1. 버전을 먼저 확인하기
Python 공식 문서는 3.10에서 separator 인수가 추가되고 기본 구분자가 &로 정해졌다고 설명합니다. 그 이전 버전의 동작을 소개한 글과 현재 3.12 코드를 같은 조건으로 비교하지 마세요.
URL 전체와 쿼리 부분도 구분합니다. 다음 예시는 URL의 query에 해당하는 문자열만 parse_qs에 전달한 결과이며, 네트워크 요청이나 실제 사이트의 지원 형식을 확인하는 예시는 아닙니다.
2. 같은 문자열을 두 설정으로 비교

입력 예시: tag=korea;lang=ko&ref=naver. Python 3.12.8에서 아래 결과를 확인했습니다.
| 호출 | 생성된 항목 |
|---|---|
| 기본 parse_qs | tag → korea;lang=ko / ref → naver |
| separator=';' | tag → korea / lang → ko&ref=naver |
기본 호출에서는 세미콜론이 tag 값 안에 남습니다. 세미콜론을 구분자로 지정한 호출에서는 &ref=naver가 lang 값 안에 남습니다. 어느 결과가 옳은지는 입력 데이터가 어떤 형식을 약속했는지와 함께 판단해야 합니다.
3. 무조건 치환하기 전에 남길 메모
| 보존할 것 | 이유 |
|---|---|
| 원래 쿼리 | 정규화 과정에서 달라진 부분 대조 |
| Python 버전·호출 인수 | 구분자 해석 조건 확인 |
| 입력 출처의 규칙 | 사이트가 기대하는 형식과 비교 |
| 파싱 결과 | 값 안에 남은 기호를 다시 확인 |
원문의 모든 세미콜론을 &로 바꾸면 값 자체에 들어 있던 기호의 의미까지 바꿀 수 있습니다. 퍼센트 인코딩된 데이터와 실제 구분자도 구분해야 합니다. 링크 수집기에서는 원본을 보존하고 변환 규칙을 명시하는 편이 좋습니다.
4. 자주 묻는 질문
separator를 바꾸면 &와 ;를 모두 인식하나요? 이 인수는 한 가지 구분자를 선택합니다. 두 기호를 동시에 나누는 설정으로 설명하지 마세요.
파싱이 되면 안전한 주소인가요? URL 파싱과 목적지 검증은 별도입니다. 이 예시는 쿼리 처리만 확인하며 실제 방문 권한이나 주소의 안전성을 판정하지 않습니다.
Python 3.12 separator 공식 설명 (영문)
공식 도움말 확인일 2026년 10월 15일: Python 3.12 separator 공식 설명 (영문).
대표 이미지는 AI로 제작한 개념 삽화이며, 본문 설명 도표는 직접 작성했습니다.