[텍스트큐브] 한글이 든 첨부 파일 이름을 그대로 나타내기 (UTF-8)
텍스트큐브와 미디어위키를 비롯한 웹 도구들은 아래처럼 웹 주소나 파일 이름에 들어가는 한글이나 한자를 URL 인코딩(URL encode)을 거쳐 아스키(ASCII) 부호값만 쓰는 형식으로 바꾸어 내보내기도 한다.
- 문서-A1.txt → %EB%AC%B8%EC%84%9C-A1.txt
- https://ko.wikipedia.org/wiki/웹
→ https://ko.wikipedia.org/wiki/%EC%9B%B9
'문서-A1.txt'와 달리 '%EB%AC%B8%EC%84%9C-A1.txt'는 웬만해선 무슨 내용인지 알아보기 힘든 이름꼴이다. 이런 이름이 들어간 파일을 받았다면, 나중에는 파일을 열어 보지 않고서는 어떤 파일이었는지 떠올리기 어려울 수 있다.
이렇게 굳이 알아보기 어려운 꼴로 파일 이름을 바꾸어 나타내는 것에는 적어도 두 가지 까닭이 있다.
첫째는 한글을 쉽게 넣지 못하는 상황이나 환경 때문이다. 한글을 능숙하게 쓰는 사람은 한글 입력기가 깔린 환경에서 '문서'를 쉽게 넣을 수 있다. 하지만 한글을 능숙하게 쓰지 못하는 사람도 있고, 다른 나라에 간다면 한글 입력기가 깔리지 않은 곳도 흔히 있다. 그런 때에 한글이 들어가는 웹 주소를 바로 넣을 수 없다면, 정확히 넣기는 어렵고 번거롭지만 아스키 문자로 바꾸어 넣는 것이 대안이 될 수 있다.
두째는 한글을 다루는 문자 부호 매김 방식이 한 가지가 아니기 때문이다. 요즈음에는 웹에서 쓰는 문자 부호 매김 방식이 유니코드를 따르는 UTF-8로 통일되고 있지만, 아직 웹에서는 EUC-KR을 쓰는 한글 웹 문서도 남아 있다. UTF-8도 EUC-KR도 쓰지 않는 경우도 있을 수 있다. 위처럼 한글 내용을 아스키 문자로 바꾸어 전달하면, 통신하는 상대(서버 - 클라이언트)가 어떤 부호 매김 방식을 쓰는지에 따라 웹 주소에 들어가는 한글 부호값이 달라지는 일을 막을 수 있다.
한글이 들어가는 파일 이름을 모두 아스키 문자로 바꾸면, 파일 이름이 알아보기도 어렵고 받아적기도 쉽지 않다. 통신 프로그램이나 운영체제에서 파일 이름의 길이에 제한이 걸리는 때는 뜻하지 않게 파일 이름이 잘리는 때도 생길 수 있다. 그러므로 이름에 한글이 들어가는 파일을 디스크에 담을 때는 아스키 문자로 바꾼 한글을 다시 알아볼 수 있는 꼴로 바꾸어 주는 절차(URL decode)도 필요하다.
한글이 들어간 이름을 아스키 형식으로 바꾼 파일을 디스크에 담을 때 한글 그대로 파일 이름이 들어가는지는 웹 누비개마다 다르다. 크롬(chrome), 엣지(edge), IE 11(Internet explorer 11) 등은 한글이 들어간 파일 이름을 알아보기 쉬운 꼴로 알아서 잘 바꿔 주지만, 파이어폭스(firefox)는 아스키 부호값만 쓰는 이름 형식 그대로 파일을 저장한다.
요즈음은 웹의 문자 부호 매김 방식이 UTF-8로 거의 통일되었고, 유니코드를 기본으로 지원하지 않는 운영체제나 응용 프로그램은 보기 어렵다. 어쩔 수 없이 오래 묵은 프로그램을 쓴다면 EUC-KR을 쓰게 되는 경우도 있겠지만, 그런 특수한 경우가 아니면 이제는 거의 모든 환경에서 UTF-8이 쓰인다고 믿고 파일 이름을 UTF-8 부호값 그대로 주고 받더라도 큰 문제는 없을 것 같다.
텍스트큐브 1.10.10에서는 다음 내용에서 한글이 들어가는 첨부 파일 이름을 아스키 형식으로 바꾸어 보내고 있다.(/interface/blog/attachment.php 25째 줄)
header('Content-Disposition: attachment; filename="' . rawurlencode(UTF8::bring($attachment['label'])) . '"');
여기에서 rawurlencode 함수 처리를 빼서 아래처럼 바꾸면 첨부 파일 이름이 UTF-8 부호값 그대로 웹 누비개에 건네진다.
header('Content-Disposition: attachment; filename="' . UTF8::bring($attachment['label']) . '"');
이렇게 바꾸면 파이어폭스에서도 한글이 들어가는 첨부 파일 이름이 '%EB%AC%B8%EC%84%9C-A1.txt' 꼴이 아닌 '문서-A1.txt' 꼴로 담길 수 있다.
덧글을 달아 주세요