안드로이드 앱에서 JSON을 이용해서 서버의 JSP와 연동을 하는 경우 한글이 깨지는 경우가 있습니다.
개인적으로 프로그래머로 개발을 하다보 한글문제가 발목을 잡을때가 많습니다. 그리고 3개의 부분에서 모두 UTF-8로 변환해서 사용하면 한글은 문제 없이 구현할 수 있었습니다.
구조는 다음과 같습니다.
Android App -> JSON -> Tomcat -> MySQL
다음은 Android App의 소스 부분입니다.
//JSON을 이용해서 한글 텍스트 서버로 전송할때...
JSONObject json=new JSONObject();
json.put("userid",USERID);
json.put("nick", NICK);
json.put("type", TYPE);
json.put("category", CATGORY);
json.put("content", CONTENT);
HttpURLConnection conn = (HttpURLConnection) new URL(m_ServerRootDir+"jsp/uploadPost.jsp").openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
wr.write(json.toString());
wr.flush();
//서버의 결과를 JSON형식으로 받아볼때.
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = rd.readLine()) != null)
{
sb.append(line + "\n");
}
wr.close();
rd.close();
conn.disconnect();
conn = null;
String JSON_DATA = sb.toString();
JSONObject json2=new JSONObject(JSON_DATA);
String m_Result = json2.getString("m_result");
JSP에서 JSON정보를 읽어오는 부분은 다음과 같습니다.
<%@ page contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
...
JSONObject obj=new JSONObject();
JSONObject json=new JSONObject();
try
{
String data=null;
InputStream is = request.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte buf[] = new byte[1024];
int letti;
while ((letti = is.read(buf)) > 0)
baos.write(buf, 0, letti);
data = new String(baos.toByteArray(),"utf-8");
json=new JSONObject(data);
}
catch(Exception e)
{
//out.write("ERROR : '" + e + "'<br/>");
}
String USERID = json.getString("userid");
//위와 같이 수신해서 활용하고 다시 JSON형식으로 되돌려 주면 됩니다.
그리고 Mysql에서느 utf-8로 database와 table을 설정하시면 됩니다. 뭐 소프트웨어 개발분야가 나는되는데 다른 분은 안되는 경우가 참 많습니다. 그건 수만가지의 환경과 설정의 차이때문이겠조...
개발자분들이 가장 쉽게 하고 많이 하는 말입니다. "저는 이렇게 해서 됬어요...^^" 이거 해결하는데 한 2주는 걸린것 같습니다. 그래도 안풀리던 문제가 풀릴 때의 느낌은...이맛에 개발하곤 합니다...ㅜㅜ
오늘도 안드로이드 앱을 개발하시면서 한글 문제로 머리짜고 계실분들을 위해서 조금이나마 도움이 되었으면 고맙겠습니다. 감사합니다.