PDF 논문 한 단락을 복사해 번역기에 넣었더니 문장이 줄마다 끊겨서 엉뚱하게 번역된 적, 엑셀에서 분명 같은 이름인데 VLOOKUP이 못 찾은 적, 다들 한 번쯤 있을 거예요. 원인은 대부분 두 가지입니다. PDF와 메신저는 화면의 줄 끝마다 실제 줄바꿈을 넣어 복사하고, 웹·한글 문서·메신저는 일반 스페이스처럼 보이는 다른 공백 문자(NBSP, 전각 공백, 제로폭 공백)를 섞어 보냅니다. 그래서 정리는 "문단은 살리고 줄바꿈만 공백으로", 그다음 "특수 공백을 일반 공백으로" 순서로 하면 거의 해결돼요.
이 글에서는 어디서 복사했느냐에 따라 어떤 문제가 생기는지, 눈에 안 보이는 문자를 어떻게 찾는지, 그리고 도구·엑셀·워드·정규식으로 각각 어떻게 지우는지를 정리했어요. 예시는 이 사이트의 줄바꿈 제거기와 공백 제거기가 실제로 쓰는 규칙에 맞췄습니다.
핵심 요약
PDF는 문단 구조 없이 줄 위치만 저장해서, 복사하면 화면의 줄 끝마다 줄바꿈이 들어가요.
빈 줄을 문단 경계로 남기고 나머지 줄바꿈을 공백으로 바꾸면 번역기·문서에 바로 쓸 수 있어요.
엑셀 TRIM은 일반 스페이스만 지우고 NBSP(U+00A0)와 전각 공백(U+3000)은 못 지웁니다.
제로폭 공백(U+200B)은 정규식 \s에도 안 걸리니 따로 지정해서 지워야 해요.
복사한 텍스트가 깨지는 이유, 출처별로 다르다
같은 "지저분한 텍스트"라도 어디서 왔느냐에 따라 문제의 종류가 달라요. 출처를 알면 어떤 정리를 해야 할지 바로 정해집니다.
| 출처 | 주로 생기는 문제 | 먼저 할 정리 |
|---|---|---|
| PDF (논문·보고서·전자책) | 줄 끝마다 줄바꿈, 영어 하이픈 줄 나눔, 쪽 번호·머리글 끼어듦 | 줄바꿈 → 공백, 문단 유지 |
| 한글 PDF | 글자 사이에 공백이 끼거나 공백이 사라짐 | 줄바꿈 정리 후 연속 공백 1칸 |
| 웹페이지 | NBSP( ), 제로폭 공백, 연속 공백 | 특수 공백 → 일반 공백 |
| 카카오톡·슬랙 | 메시지마다 줄바꿈, 이름·시간 줄 섞임 | 이름·시간 제거, 줄 잇기 |
| 한글(HWP)·일본어 문서 | 전각 공백(U+3000) 들여쓰기 | 전각 공백 → 일반 공백 |
| 엑셀·구글 시트 | 셀 끝 공백, 셀 안 줄바꿈, 탭 | 앞뒤 공백 제거 |
| 오래된 이메일 | 70~80자마다 강제 줄바꿈, 인용 기호 > | 줄바꿈 → 공백, 문단 유지 |
PDF에서 복사하면 왜 줄이 끊길까
PDF는 "문단"이라는 개념 없이 페이지 위 정해진 좌표에 글자를 배치하는 형식이에요. 화면에서 한 줄이 끝나는 자리는 실제 문장 끝과 상관없이 그냥 폭이 다 찬 자리일 뿐인데, 복사할 때는 그 자리마다 줄바꿈 문자가 들어간 것처럼 나옵니다. 번역기(파파고, 구글 번역, DeepL)는 줄바꿈을 문장 끝으로 이해하기 때문에, 한 문장을 서너 조각으로 나눠 번역하면서 품질이 크게 떨어져요.
영어 PDF에는 하이픈 줄 나눔(infor-⏎mation)이 섞이고, 조판이 잘 된 문서에서는 "fi", "fl" 같은 글자 쌍이 합자(fi, U+FB01) 한 글자로 복사되기도 해요. 합자가 섞이면 검색에서 "file"이 안 걸리니 이런 문서는 결과물을 한 번 검색해 보는 게 좋습니다. 두 단 편집 논문은 왼쪽 단과 오른쪽 단의 줄이 번갈아 섞여 복사되는 경우도 있는데, 이건 도구로 자동 복구가 어렵고 단별로 따로 드래그해서 복사하는 게 가장 빠릅니다.
줄바꿈 정리: 문단은 살리고 줄만 잇는 법
예시로 PDF에서 복사한 두 문단짜리 글을 보죠.
연구 결과에 따르면 하루 30분 이상 걷는 사람은
그렇지 않은 사람보다 수면의 질이 높게
나타났다. 특히 오후 시간대의 산책이
효과적이었다.
이러한 경향은 연령과 관계없이 일관되게
관찰되었으며, 추가 연구가 필요하다.
7줄(빈 줄 포함)인데 실제로는 문단 2개예요. 줄바꿈 제거기에서 "공백으로 바꾸기 + 문단(빈 줄) 유지"를 고르면 줄바꿈 4개가 공백으로 바뀌고, 빈 줄로 구분된 문단 경계는 그대로 남아서 결과가 3줄(문단 2개와 사이의 빈 줄)이 됩니다. 글자 수는 122자로 똑같아요. 줄바꿈 하나가 공백 하나로 바뀌었으니까요.
여기서 고를 수 있는 방식이 세 가지인데, 언제 무엇을 쓰는지가 중요해요.
- 공백으로 바꾸기: 한국어·영어 문장에서는 거의 항상 이게 정답이에요. 줄 끝 단어와 다음 줄 첫 단어 사이에 공백이 들어갑니다.
- 완전히 제거(붙이기): 줄 끝 단어와 다음 줄 첫 단어가 붙어 버려요. "사람은그렇지"처럼 되니 문장에는 쓰면 안 되고, 중간에 끊긴 전화번호·계좌번호·URL·긴 코드 문자열을 붙일 때만 씁니다.
- 구분자로 잇기: 엑셀 한 열을 복사해 "사과, 배, 귤"처럼 쉼표로 잇거나, 탭으로 이어 한 행으로 붙여 넣을 때 써요.
문단 구분이 사라졌다면
원문 PDF에서 문단 사이에 빈 줄이 없으면, 복사한 텍스트에는 문단을 구분할 정보 자체가 없어요. 이 경우 결과가 통째로 한 덩어리가 됩니다. 두 가지 방법이 있어요. 원문에서 문단이 시작되는 자리에 빈 줄을 직접 넣고 변환하거나, 결과에서 필요한 위치에 엔터를 넣는 거죠. 문단이 짧으면 후자가 빠르고, 긴 보고서라면 전자가 덜 헷갈립니다.
목록이 섞인 글이라면 "목록(-, •, 1.) 줄 유지"를 켜 두세요. 줄 앞에 하이픈, 글머리 기호, "1." 같은 번호가 있으면 그 앞의 줄바꿈은 남겨서 목록 모양이 유지돼요. 영어 PDF는 "줄 끝 하이픈 단어 붙이기"를 켜면 infor-⏎mation이 information으로 붙습니다. 이 옵션은 다음 줄이 소문자로 시작할 때만 작동해서, well-⏎Known처럼 대문자로 이어지는 경우는 하이픈을 남겨요.
카톡·메신저에서 복사한 글 정리
메신저 텍스트는 PDF와 반대로, 줄바꿈 하나하나가 대개 "의미 있는" 줄바꿈이에요. 한 사람이 메시지를 여러 번 나눠 보냈거나, 목록을 한 줄씩 보냈기 때문이죠. 그래서 무조건 이어 붙이기보다 어떤 모양으로 만들지를 먼저 정해야 합니다.
- 한 문단으로 합치기: 회의 내용을 여러 메시지로 받았다면 "공백으로 바꾸기"로 한 문단을 만들어 문서에 붙여요.
- 쉼표 목록으로 만들기: "참석자: 김○○ ⏎ 이○○ ⏎ 박○○"처럼 한 줄에 하나씩 온 목록은 "구분자로 잇기"에 쉼표를 넣으면 "김○○, 이○○, 박○○"가 됩니다.
- 이름·시간 줄 지우기: PC 카카오톡에서 여러 메시지를 한꺼번에 복사하면 줄 앞에 [이름] [오후 3:15] 같은 표시가 붙어 나오는 경우가 많아요. 이건 정규식으로 줄 앞부분을 지우는 게 가장 빠릅니다.
찾기: ^\[[^\]]+\] \[[^\]]+\]
바꾸기: (빈칸)
정규식 테스트 도구의 치환 기능에 이 패턴을 넣으면(여러 줄 모드 m 플래그) 각 줄 앞의 이름·시간이 지워지고 메시지 본문만 남아요. 그다음 줄바꿈 제거기로 넘기면 됩니다. 정규식이 처음이면 정규식 기초 문법 치트시트를 먼저 보세요.
눈에 안 보이는 공백 문자: NBSP·전각 공백·제로폭 공백
이게 진짜 골치 아픈 부분이에요. 화면에는 똑같이 빈칸으로 보이는데 컴퓨터는 서로 다른 문자로 취급하거든요. 그래서 "홍길동"과 "홍길동 "(끝에 NBSP)이 다른 값이 되고, 검색·VLOOKUP·중복 제거가 조용히 실패합니다.
| 문자 | 코드 | 주로 오는 곳 | 화면 |
|---|---|---|---|
| 일반 스페이스 | U+0020 | 키보드 | 빈칸 |
| 탭 | U+0009 | 엑셀·표 복사 | 넓은 빈칸 |
| NBSP (줄바꿈 없는 공백) | U+00A0 | 웹페이지 , 워드 | 빈칸 |
| 전각 공백 | U+3000 | 한글(HWP) 들여쓰기, 일본어 입력 | 한 글자 폭 빈칸 |
| 얇은 공백 등 | U+2000~U+200A | 조판된 PDF·전자책 | 좁은 빈칸 |
| 제로폭 공백 | U+200B | 웹 에디터, 일부 메신저 | 안 보임 |
| BOM | U+FEFF | 파일 맨 앞, 윈도우 메모장 | 안 보임 |
섞였는지 확인하는 방법
가장 쉬운 방법은 공백 제거기에 붙여 넣는 거예요. 입력란 아래에 일반 공백, 탭, 전각, NBSP, 제로폭, 줄바꿈이 각각 몇 개 들어 있는지 표시됩니다. NBSP가 0이 아니면 웹이나 워드에서 온 글이고, 전각이 있으면 한글 문서나 일본어 입력에서 온 글이에요.
글자 수와 바이트를 비교하는 방법도 있어요. 영문·숫자만 있는 셀인데 글자 수 세기에서 UTF-8 바이트가 글자 수보다 크다면 비ASCII 문자가 숨어 있다는 뜻이에요. 코드로 확인하려면 각 문자의 코드 포인트를 찍어 보면 됩니다. 이 방법은 JSON 파싱 에러 원인 정리에서 보이지 않는 문자를 찾을 때 쓴 것과 같아요.
엑셀·구글 시트에서 공백과 줄바꿈 지우기
엑셀 TRIM 함수가 공백을 못 지운다는 질문이 정말 많아요. 이유는 간단해요. 엑셀 TRIM은 일반 스페이스(U+0020)만 처리합니다. 앞뒤 공백을 지우고 단어 사이 연속 공백을 1칸으로 줄이지만, NBSP(CHAR(160))와 전각 공백은 손대지 않아요. CLEAN 함수도 코드 0~31의 제어 문자(셀 안 줄바꿈 CHAR(10) 포함)만 지웁니다.
| 하고 싶은 것 | 엑셀 수식 |
|---|---|
| 일반 공백 앞뒤 정리 | =TRIM(A2) |
| NBSP까지 정리 | =TRIM(SUBSTITUTE(A2,CHAR(160)," ")) |
| 전각 공백까지 정리 | =TRIM(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160)," "),UNICHAR(12288)," ")) |
| 셀 안 줄바꿈을 공백으로 | =SUBSTITUTE(A2,CHAR(10)," ") |
| 모든 일반 공백 제거 | =SUBSTITUTE(A2," ","") |
수식이 길어지면 실수하기 쉬워서, 저는 열을 통째로 복사해 공백 제거기에 붙이고 "앞뒤 공백만 제거" + NBSP·전각 옵션을 켠 뒤 결과를 다시 붙여 넣는 쪽을 더 자주 써요. 한 줄이 한 셀이라 순서가 그대로 유지됩니다. 정리 후 같은 값이 여러 번 나온다면 목록 중복 제거와 정렬 방법으로 이어서 정리하면 돼요.
워드·한글에서 찾아 바꾸기로 정리하기
MS Word의 찾기 및 바꾸기는 특수 문자 코드를 지원해요. ^p는 문단 기호(엔터), ^l은 줄 바꿈(Shift+Enter), ^s는 줄바꿈 없는 공백(NBSP), ^w는 모든 공백을 뜻합니다. PDF에서 복사한 글을 문단만 남기고 정리하는 고전적인 순서는 이렇습니다.
- ^p^p(빈 줄)를 문서에 없는 임시 기호, 예를 들어 ###으로 바꿉니다. 문단 경계를 보호하는 단계예요.
- ^p(남은 줄바꿈)를 공백 한 칸으로 바꿉니다.
- ###을 다시 ^p로 바꿉니다.
- ^s를 일반 공백으로, 공백 두 칸을 한 칸으로 몇 번 반복해 바꿉니다.
줄바꿈 제거기의 "문단(빈 줄) 유지"가 하는 일이 정확히 1~3단계예요. 한글(HWP)도 찾아 바꾸기에서 조판 부호를 고를 수 있지만 버전마다 메뉴가 달라서, 웹 도구로 정리한 뒤 붙여 넣는 쪽이 보통 더 빠릅니다.
정규식으로 한 번에 처리할 때 주의할 점
개발자라면 정규식 한 줄로 끝내고 싶을 거예요. 이때 \s가 무엇을 포함하는지 언어마다 다르다는 점을 알아야 합니다. Node.js와 파이썬에서 직접 확인한 결과예요.
| 문자 | JavaScript \s | Python re \s |
|---|---|---|
| NBSP U+00A0 | 포함 | 포함 |
| 전각 공백 U+3000 | 포함 | 포함 |
| 얇은 공백 U+2009 | 포함 | 포함 |
| BOM U+FEFF | 포함 | 미포함 |
| 제로폭 공백 U+200B | 미포함 | 미포함 |
제로폭 공백은 이름과 달리 유니코드에서 공백(whitespace)으로 분류되지 않아서 \s로 안 잡혀요. 그래서 안전한 정리 순서는 "제로폭 문자 삭제 → \s+를 공백 1칸으로 → 앞뒤 trim"입니다.
const clean = text
.replace(/[-]/g, '') // 제로폭 문자 삭제
.replace(/[^\S\n]+/g, ' ') // 줄바꿈 빼고 모든 공백 → 1칸
.replace(/ *\n */g, '\n') // 줄 앞뒤 공백 제거
.trim();
두 번째 줄의 [^\S\n] 은 "줄바꿈이 아닌 공백"이라는 뜻이에요. 그냥 \s+ 를 쓰면 줄바꿈까지 공백으로 바뀌어 문단이 다 사라지니 주의하세요.
자주 묻는 질문
PDF에서 복사한 글을 번역기에 넣으면 왜 이상해지나요?
PDF는 화면의 줄 끝마다 줄바꿈이 들어간 채로 복사되고, 번역기는 줄바꿈을 문장 끝으로 이해해서 한 문장을 쪼개 번역하기 때문이에요. 줄바꿈을 공백으로 바꾸고 빈 줄로 된 문단만 남긴 뒤 넣으면 훨씬 자연스러워집니다.
엑셀 TRIM을 썼는데 공백이 안 지워져요.
TRIM은 일반 스페이스만 지우고 NBSP(CHAR(160))나 전각 공백은 처리하지 않아요. =TRIM(SUBSTITUTE(A2,CHAR(160)," "))처럼 먼저 바꾼 뒤 TRIM을 쓰거나, 공백 제거기에서 NBSP·전각 옵션을 켜고 정리하세요.
공백을 다 지웠는데도 글자 사이가 떨어져 보여요.
NBSP, 전각 공백, 얇은 공백 같은 특수 공백이 남아 있을 가능성이 커요. 공백 제거기 입력란 아래의 문자 종류별 개수를 보고 해당 옵션을 켜세요. 그래도 남는다면 공백이 아니라 폭이 넓은 문장부호일 수 있어요.
줄바꿈을 아예 없애면 안 되나요?
한국어 문장에서 줄바꿈을 완전히 없애면 줄 끝 단어와 다음 줄 첫 단어가 붙어 버려요. 문장은 "공백으로 바꾸기"를 쓰고, "완전히 제거"는 끊긴 전화번호·URL·코드처럼 붙여야 하는 값에만 쓰세요.
카톡 대화에서 이름과 시간만 지울 수 있나요?
줄 앞에 [이름] [시간] 형식으로 붙어 있다면 정규식 ^\[[^\]]+\] \[[^\]]+\] 를 빈칸으로 치환하면 됩니다. 형식이 다르면 실제 복사된 첫 줄을 보고 패턴을 맞춰야 해요.
정리
복사한 텍스트 정리는 순서가 전부예요. 출처를 보고 문제를 짐작하고, 줄바꿈을 공백으로 바꾸면서 문단을 지키고, 마지막에 NBSP·전각·제로폭 같은 특수 공백을 일반 공백으로 바꿔 연속 공백을 1칸으로 줄이면 됩니다. 엑셀 TRIM이 안 먹히거나 같은 값이 다르게 인식될 때는 거의 항상 보이지 않는 공백이 범인이에요.
PDF·메일 줄바꿈은 줄바꿈 제거기, 특수 공백 확인과 정리는 공백 제거기에서 바로 해 보세요. 정리한 글의 분량을 확인하려면 글자 수·단어 수·어절 차이 글도 참고하세요.