<%@page contentType="text/html; charset=euc-kr" %>
<%@page import="java.io.*" %>
<HTML>
<HEAD><TITLE>노래 목록</TITLE></HEAD>
<BODY>
노래 파일 목록<BR><BR>
<%
String absolutePath = application.getRealPath("/WEB-INF/songs");
File directory = new File(absolutePath);
String songlist[] = directory.list();
int length = 0;
try
{
for(int i=0;i<songlist.length;i++)
{
if(songlist[length] == null)
{
out.println("종료\r\n");
break;
}
out.println("<a href= \"SongReader.jsp?filename= " + songlist[i] + "\" target=\"_self\">"
+ songlist[i] + "</a>"+"<BR>");
}
}
catch(Exception e)
{
out.println("에러발생\r\n");
}
finally
{}
%>
</BODY>
</HTML>
이 코드를 실행하면요, /WEB-INF/songs에 저장된 노래가사 텍스트 파일의 이름을 SongReader.jsp라는 jsp페이지에 보내줘요. 그러면 SongReader.jsp페이지 파일이 이 코드가 보낸 파일 이름을 읽어서 출력하는 프로그램을 만들고 있는데요.
이 jsp페이지에서는 파일이름이 영어든 한글이든 다 출력이 되는데 SongReader.jsp라는 페이지에서 파일이름을 받아 출력하면 영어는 제대로 출력되는데 한글이 깨져요.
한글을 안깨지게 하려면 어떻게 해야되나요?
request.setCharacterEncoding("euc-kr") 이거를 파라미터 받기 전에 제일 먼저 썼는데도 한글이 깨지는 건 마찬가지고요. 뭐가 문제일지요?
SongReader.jsp코드는 아래에
<%@page contentType="text/html; charset=euc-kr" %>
<%@page import="java.io.*" %>
<HTML>
<HEAD><TITLE>노래 가사</TITLE></HEAD>
<BODY>
파일 이름:
<%
request.setCharacterEncoding("text/html;charset=euc-kr");
String filename = request.getParameter("filename");
out.println(filename);
%>
</BODY>
</HTML>
왜 저렇게 코딩하지..
주소에 한글 들어가면 UTF-8로 보내는 게 표준인데. 폼 태그 써서 GET 메서드로 보내면 제대로 euc-kr로 주는데 주소에 한글 쳐 박으면 페이지 인코딩이 뭘로 되어있든 UTF-8로 보내는 게 브라우저 기본값임. 그래서 2000년대 극초반 개인 홈피 열풍 불 때 한글 파일명은 들어가지지 않아서 (서버 시스템은 euc-kr 쓰는데 주소가 utf-8로
전달되니 404 에러) 개인 홈피 호스팅 서비스들에서 하나같이 404 커스텀 오류 페이지에 인터넷 옵션 고급 탭에 UTF-8로 주소 보내기 체크 풀으라는 안내 문구가 있었음. 지금은 표준 웹이 대세여서 유니코드 쓰는 게 대세니 저런 병맛같은 지침을 알려주는 사이트는 없어졌지만(그 지침대로 해서 잘 된다 하더라도 다른 사이트 서비스 쓸 때 문제가 생기지).
그래서 request.setCharacterEncoding에 euc-kr이 아니라 utf-8을 넣어보든가 아님 링크 태그 찍을 때 euc-kr 방식으로 이스케이핑해서 쏴주든가 해야지. 자바스크립트의 encodeURIComponent 함수 쓰면 아마 자동으로 euc-kr 인코딩 해줄걸?
utf-8방식으로 하면 한글, 영어 다 깨지네
http://localhost:8080/brain03/SongReader.jsp?filename=
.txt
java.net클래스의 URLEncoder.encode라는 함수를 사용해서 인코딩 해서 보냈는데
복사해서 붙혀넣을랬더니 안써지네 디씨 으휴
아무튼 인코딩된걸로 보이는 문자열이 url뒤에 붙어서 전송되긴 했는데
인코딩 된 문자열 파라미터 받아서 request.getParameter로 받으면 그냥 알아서 url풀어준다는데
근데도 깨진다기보다는 그냥 ?????.txt라고 나와
파일이름이 애국가.txt이건데 그냥 ??로만 나오네
텍스트파일이랑 소스코드 html도 전부 utf-8로 인코딩해