[APM] PHP, Android, Mysql 연동시 한글 깨짐 문제

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"));  
했었어야했다. 

 

휴. 한글 띄우기 성공!

반응형
그리드형

댓글

❤️김세인트가 사랑으로 키웁니다❤️