[APM] PHP, Android, Mysql 연동시 한글 깨짐 문제
- 컴퓨터공학과/Programming
- 2020. 3. 23.
APM 환경에서 한글 연동시 문제가 생겼다.
영어는 문제 없이 통신이 잘 되는데 한글만 넣으면 한글이 깨져서 괴상하게 출력된다.
인터넷에 나와있는 대로 해도 안되어서 고생 끝에 드디어 해결했다.
문제 해결을 위해 가장 중요한 것은 PHP ↔ DB, DB ↔ Android, Android ↔ PHP 간의 모든 통신에서 모두 같은 캐릭터형을 써야 한다는 것이다.
나는 euc-kr 대신 utf-8을 사용하였다.
다른 사이트를 참고하여도 안된다면 마지막 방법으로 다음과 같이 설정해보자.
[PHP] db-connection 부분
→ mysql_query("set names utf8", $con); 라인 추가
function connect() {
// import database connection variables
require_once 'D:\APM_Setup\htdocs\Insole_php\db_config.php';
// Connecting to mysql database
$con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());
mysql_query("set names utf8", $con);
// Selecing database
$db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());
// returing connection cursor
return $con;
}
[Android] 통신 부분
→ Post 방식 : httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
→ Get 방식 : String paramString = URLEncodedUtils.format(params, "utf-8");
try {
if(method.equals("POST")) {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} else if(method.equals("GET")) {
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
[Mysql] 캐릭터셋 설정 변경
→ my.ini 파일 수정
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init_connect=SET collation_connection=utf8_general_ci
init_connect=SET NAMES utf8
[mysql]
default-character-set=utf8
이렇게 파일을 수정하든가
→ 콘솔창에서
ALTER DATABASE db_name character set utf8 collate utf8_general_ci;
ALTER TABLE table_name convert to charset utf8;
라 치면 한번에 변경할 수 있다.
나 같은 경우에는 안드로이드 통신부분에서 utf-8로 인코딩하지 않고 보냈다.
httpPost.setEntity(new UrlEncodedFormEntity(params)); 이렇게.... 힝
이렇게 하면 안되고
httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
했었어야했다.
휴. 한글 띄우기 성공!
'컴퓨터공학과 > Programming' 카테고리의 다른 글
[C++]정렬 알고리즘 프로그래밍-②정렬할 준비하기 (0) | 2020.03.25 |
---|---|
[C++]정렬 알고리즘 프로그래밍-①코딩 준비하기 (0) | 2020.03.24 |
[C++] String과 char 배열 비교 (0) | 2015.10.06 |
[Android] Unhandled event loop exception 에러 해결 (0) | 2014.03.05 |
[Android] plugins 에러 - Failed to create the part's controls 해결방법 (0) | 2014.03.05 |