Python3.12 urlsplit 앞 공백이 사라질 때: 원본 문자열과 분해 결과를 따로 보관

URL 앞 공백 왜 사라질까 원본부터 보관 제목과 주소창·원본 노트를 보여주는 노트북 개념 삽화

Python3.12의 urlsplit 결과는 원본 문자열을 한 글자도 바꾸지 않고 보관하는 사본이 아닙니다. 공식 문서는 앞쪽 C0 제어 문자·공백을 제거하고, 줄바꿈·캐리지리턴·탭은 URL의 어느 위치에서든 제거한다고 설명합니다. 링크 수집 검수에서는 원본과 분해 결과를 다른 칸에 남겨야 합니다.

1. 원본과 geturl 결과를 같은 값으로 덮어쓰지 않기

공식 문서는 앞쪽 제어 문자·공백 제거를3.12 변경으로, ASCII 줄바꿈·탭 제거를3.10 변경으로 구분합니다. 지금 사용하는 버전의 동작을 확인하고, 화면에 보이지 않는 문자가 있었는지 원본 표현을 함께 살펴보세요. urlsplit은 URL의 안전성·유효성을 전부 검증하는 함수도 아닙니다.

from urllib.parse import urlsplit

raw = ' https://example.com/a\nb'
parts = urlsplit(raw)
print(repr(raw))
print(parts.geturl())
# 재조합 결과: https://example.com/ab

실행 환경 Python3.12에서 확인한 독립 예시입니다. example.com은 예시용 주소이며 이 코드는 네트워크 요청을 보내지 않습니다.

Python3.12 공식 urlsplit 변경 사항 확인

2. 눈에 보이는 문자열만 복사하면 놓칠 수 있습니다

원본: 받은 문자열을 먼저 보존 / 표현: repr로 보이지 않는 문자 관찰 / 결과: geturl과 원본을 따로 비교 / 판정: 정리와 유효성 검증은 별개

보관할 값용도구분할 것
원본 raw실제 받은 문자열 보존분해한 결과로 덮어쓰지 않기
repr(raw)줄바꿈·탭 등 관찰보기용 표현과 원래 문자열
parts.geturl()분해 결과에서 재조합한 URL원본과 완전 동일하다는 추정

검수 메모에 repr 문자열을 남기는 것은 보기 위한 방법입니다. repr 결과를 그대로 새 링크 주소로 붙여 넣는 작업과는 다릅니다. 주소를 실제로 사용할 값과 차이를 관찰하기 위한 표현을 분리하세요.

3. 링크 목록에 변화 이유를 남기기

예를 들어 목록에 원본, 분해 결과, 달라진 이유를 각각 저장할 수 있습니다. 원본에 공백이나 제어 문자가 있었다면 해당 행을 별도 검토 대상으로 남기고 어디에서 들어왔는지 확인하세요. 정리된 주소가 열리는지만 보아 원래 수집 데이터가 정확했다고 결론 내리지 않는 편이 낫습니다.

자체 검수표예시로 적을 내용
입력 경로HTML 속성 /CSV /직접 입력 중 확인한 경로__
실행 버전Python 버전__
관찰앞 공백__ /줄바꿈·탭 유무__
결과재조합 문자열__ /차이가 난 이유__
판정그대로 사용 /원본 확인 대기__

실제 목록에 인증값이나 개인 정보가 들어 있다면 공개 예시에 그대로 옮기지 마세요. 코드 예시는 값 자체보다 어떤 차이를 비교했는지 설명할 수 있는 비식별 예시로 만드는 것이 좋습니다.

4. 자주 묻는 질문

geturl이 달라졌으면 파싱이 실패한 건가요? 반드시 그런 뜻은 아닙니다. 문서에 설명된 처리와 입력 문자열을 먼저 대조하세요.

공백이 사라졌으니 안전한 링크인가요? 문자열 처리와 목적지·유효성 검증은 별개입니다. urlsplit의 성공만으로 모든 검증을 마쳤다고 기록하지 않습니다.

공식 자료 확인 2026.10.18: Python3.12 Library Reference, urllib.parse.urlsplit.

대표 썸네일은 AI로 제작한 개념 삽화이며 본문 설명 도표는 직접 구성했습니다.

이 블로그의 인기 게시물

디노 블로그 링크 추출기

디노 글자수 계산기

URL에 앰퍼샌드 표기가 남을 때: HTML 원문과 추출한 href를 구분하세요