-
EUC-KR과 UTF-8 정리, 웹페이지 개발의 영원한 화두정보통신에너지/웹프로그래밍 2014. 4. 2. 05:00
웹페이지 개발을 하다보니..
영원히 피해갈 수 없는 화두인 언어문제, EUC-KR과 UTF-8 문제에 부딪쳤습니다.
사이트간 데이터 교환을 위해서 인코딩해서 데이터를 날리고..
데이터를 받아서 디코딩하고.. 뭐 이런 구현을 하는게 있는데,
중간에 자꾸 데이터가 소실되는 겁니다.
어떤 데이터는 잘 가고..
어떤 데이터는 잘 안가고..
그 어떤 규칙성이 존재하는건가?
유심히 관찰한 결과..
EUC-KR 문제라는 것을 알았습니다.
사실 정확한 원리까지 낱낱히 파해치진 못했지만..
어쨌든 EUC-KR 완성형 한글은 표현하지 못하는 문자들이 존재합니다.
그리고 그 문자들이 데이터그램에 포함되었을 때..
인코딩과 디코딩 과정에서 에러로 인식되서 통신이 안되는게 아닐까.. 생각을 해봤습니다.
그래서 디버깅을 통해서 알아보았는데..
결론적으로 문제를 해결했고 EUC-KR과 UTF-8 개발 관련 사항들을 간략히 정리해보겠습니다.
1. 기본적으로 UTF-8과 EUC-KR 간의 변수 변환은
$content = iconv('eucKR','UTF-8',$content);
명령어를 쓰면 해결된다. 이 떄, 대문자 소문자를 잘 맞추는 것이 중요하다.
2. 사실 EUC-KR과 UTF-8 변환문제는 PHP와 MYSQL과 뗼레야 떼기 힘든 문제다.
만약 PHP와 MYSQL을 사용한다면.. 코딩 자체가 뿐만 아니라 MYSQL에 저장되는 형태까지도 신경을 써야한다.
이 때,, 한큐에 해결하는 방법이 있다. 바로
mysql_query('set names utf8');
이 명령어를 쓰는거다. 이것은 MYSQL에 저장될때 UTF-8 형태가 인식되도록 쿼리를 넣는 명령어다.
만약 이것을 쓰지 않을 경우 EUC-KR 으로 인식되어 MYSQL에 저장될 수가 있고..
문자들은 제대로 구현이 안되거나 다 깨져버릴 것이다.
참고로 EUC-KR만 쓰거나 UTF-8만 쓰거나 한는 경우에는 큰 문제가 없다.
별로 복잡한 것도 없고..
근데 문제는 여러 사이트들이 서로 연동되거나 통신을 해야하는 경우에..
우리나라 환경 상, EUC-KR 웹사이트와 UTF-8 웹사이트들이 동시에 얽히는 경우가 다반사이므로..
그 두가지 한글 형태가 섞이는 경우에 상당히 골치아파진다.
그러나 사실 잘 생각해보면 문제가 그리 복잡하지는 않다.
잘 변환을 해주거나.. 아니면 어자피 통신 자체는 구별이 없으므로,
일단 데이터를 받은 다음에 그 데이터에 대한 인식 방식을 잘 선택하면 되는 것이다.
어쨌든 한 사이트 내에서 두 방식을 혼용해서 사용해야할 때에,
그리고 MYSQL과 PHP가 연관이 있는 경우에..
mysql_query('set names utf8');
이 명령어가 거의 신의 한수이자 확실한 해결책이 될 것이라 생각한다.