일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- docker
- VMware
- sudo
- docker registry
- 루비
- AWS
- 우분투
- VIM
- ssh
- 리눅스
- window size
- driver
- golang
- port
- RUBY
- opsworks
- ubuntu
- VPN
- Chef
- QT
- Openswan
- 도커
- 방화벽체크
- ssh command
- 드라이버
- Linux
- docker-compose
- 패키지
- DevOps
- docker container
- Today
- Total
구리의 창고
Locale, Apache, Putty 인코딩 - 문자가 깨지는 경우 본문
웹 작업을 하다보면 문자열이 깨지는 경우가 많다.
vim에 깨지는 경우, 웹에서 깨지는 경우, meta tag에 있는 charset을 따라가지 않는 경우 등 다양하다.
흔히 EUC-KR과 UTF-8 문제이다.
리눅스 서버에서 작업을 한다는 가정하에 해결방법을 적어보겠다.
우리의 목표는 UTF-8로 맞추는 것이다.
* 터미널 인코딩 맞추기
1) locale 명령어를 이용해 서버 인코딩을 확인한다.
2) 만약에 ko_KR.EUC-KR 로 돼있다면 vi /etc/sysconfig/i18n 에서 아래와 같이 바꿔준다.
3) 2번과정을 했음에도 불구하고 문자열이 깨지는 경우가 있다.
계정마다 존재하는 ~/.bashrc 파일에서 강제로 export를 해주는 경우이다.
vi ~/.bashrc 를 통해 export LANG=ko_KR.EUC-KR 과 같은 구문을 삭제해준다.
저장 후, source ~/.bashrc 를 통해 다시 로드해준다.
* PUTTY 설정
1) 푸티 제목표시줄 우클릭 후 설정변경(Change Settings)를 클릭한다.
2) Window > Translation > Remote character set 을 UTF-8로 바꿔준다.
(한글판: 창 > 변환 > 수신한 데이터를 이 문자셋으로 가정)
3) 그리고 한글폰트가 지원되는 폰트를 선택해야한다.
Window > Appearance > Font settings > Change...
(한글판: 창 > 모양 > 글꼴 설정 > Change...)
4) 적용을 누른다.
위 과정을 했음에도 불구하고 ls 명령어로 목록을 조회했는데 파일명이 물음표나 깨져서 나올 수 있다.
* 파일 이름 인코딩 설정
1) 파일이름과 파일내용 인코딩은 별개이다.
2) convmv 유틸을 이용해서 파일 인코딩을 바꿔준다.
여기까지 했으면 터미널에서(vim 내용이 아닌) 나오는 메시지는 모두 제대로 나올 것이다.
하지만, 아직 웹이나 vim 으로 내용 확인 시 파일 내용이 깨지는 것을 볼 수 있을지도 모른다.
그런 상황에선 계속.... 아래로
* 파일 내용 인코딩 설정
1) 파일 내용 인코딩은 iconv 명령어를 통해 변경 할 수 있다.
주의!! {filename}과 {convertedFilename}이 같으면 내용이 날아간다.
2) 여기까지 제대로 따라했다면 UTF-8로 출력되는 vim 화면을 볼 수있다.
하지만 아직도 웹페지는 깨져 나올 수 있다.
* Meta tag에 charset 설정
1) 웹 페이지 파일 중 head 를 포함하는 파일을 연다.
2) <head> 바로 밑 <title></title> 위 사이에 아래와 같이 meta tag를 삽입한다.
3) 웹페이지를 확인하여 제대로 출력됐는지 확인한다.
4) 만약 이렇게 했는데 깨진다면, 웹브라우저 인코딩이 어떻게 돼있는지 확인한다.
확인 방법은, 우클릭 후 인코딩 항목을 찾아서 UTF-8로 강제 설정해본다.
5) 4번 과정 후, 제대로 출력된다면 아파치 설정이 이상한 것이다.
6) 더 확실 한 것은 웹브라우저의 디버깅 기능을 이용해서 아래와 같이 헤더를 확인하는 것이다.
아래는 크롬의 요소 검사 > Network 기능을 이용해 확인했다.
Firefox의 경우는 Firebug를 사용하면 확인 할 수 있다.
Accept-Charset에 euck-kr나 cp949가 있다면, 이를 변경해줘야 한다.
* Apache 설정
1) 아파치 설정은 서버마다 다르겠지만, 보통 아래 경로에 있다.
/etc/httpd/conf/httpd.conf
/etc/apache2/conf/httpd.conf
2) 위 파일을 열어서 AddDefaultCharset을 검색한다.
3) 그 후 AddDefaultCharset UTF-8 로 세팅을 해주고 아파치를 재시작한다.
아마 여기까지 했으면 제대로 출력 될거라 생각한다.
그래도 추가로 문자열이 깨진다!! 하면 Database에서 읽어오는 문자열이 UTF-8인지 확인해봐야한다.
MySQL의 경우, 데이터베이스, 테이블, 컬럼에서 사용하는 charset이 각각 다르다.
전부 체크해 utf8_general_ci로 바꿔주면 된다.
만약 EUC-KR 로 서버를 바꾸고 싶다면 위 과정을 전부 EUC-KR로 바꿔서 해주면된다.
vim에 깨지는 경우, 웹에서 깨지는 경우, meta tag에 있는 charset을 따라가지 않는 경우 등 다양하다.
흔히 EUC-KR과 UTF-8 문제이다.
리눅스 서버에서 작업을 한다는 가정하에 해결방법을 적어보겠다.
우리의 목표는 UTF-8로 맞추는 것이다.
* 터미널 인코딩 맞추기
1) locale 명령어를 이용해 서버 인코딩을 확인한다.
2) 만약에 ko_KR.EUC-KR 로 돼있다면 vi /etc/sysconfig/i18n 에서 아래와 같이 바꿔준다.
LANG="ko_KR.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.UTF-8:ko_KR.eucKR:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"
3) 2번과정을 했음에도 불구하고 문자열이 깨지는 경우가 있다.
계정마다 존재하는 ~/.bashrc 파일에서 강제로 export를 해주는 경우이다.
vi ~/.bashrc 를 통해 export LANG=ko_KR.EUC-KR 과 같은 구문을 삭제해준다.
저장 후, source ~/.bashrc 를 통해 다시 로드해준다.
* PUTTY 설정
1) 푸티 제목표시줄 우클릭 후 설정변경(Change Settings)를 클릭한다.
2) Window > Translation > Remote character set 을 UTF-8로 바꿔준다.
(한글판: 창 > 변환 > 수신한 데이터를 이 문자셋으로 가정)
3) 그리고 한글폰트가 지원되는 폰트를 선택해야한다.
Window > Appearance > Font settings > Change...
(한글판: 창 > 모양 > 글꼴 설정 > Change...)
4) 적용을 누른다.
위 과정을 했음에도 불구하고 ls 명령어로 목록을 조회했는데 파일명이 물음표나 깨져서 나올 수 있다.
* 파일 이름 인코딩 설정
1) 파일이름과 파일내용 인코딩은 별개이다.
2) convmv 유틸을 이용해서 파일 인코딩을 바꿔준다.
convmv -f euc-kr -t utf-8 {filename} > {convertedFilename}
여기까지 했으면 터미널에서(vim 내용이 아닌) 나오는 메시지는 모두 제대로 나올 것이다.
하지만, 아직 웹이나 vim 으로 내용 확인 시 파일 내용이 깨지는 것을 볼 수 있을지도 모른다.
그런 상황에선 계속.... 아래로
* 파일 내용 인코딩 설정
1) 파일 내용 인코딩은 iconv 명령어를 통해 변경 할 수 있다.
주의!! {filename}과 {convertedFilename}이 같으면 내용이 날아간다.
iconv -f euc-kr -t utf-8 {filename} > {convertedFilename}
2) 여기까지 제대로 따라했다면 UTF-8로 출력되는 vim 화면을 볼 수있다.
하지만 아직도 웹페지는 깨져 나올 수 있다.
* Meta tag에 charset 설정
1) 웹 페이지 파일 중 head 를 포함하는 파일을 연다.
2) <head> 바로 밑 <title></title> 위 사이에 아래와 같이 meta tag를 삽입한다.
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>제목 없음</title>
3) 웹페이지를 확인하여 제대로 출력됐는지 확인한다.
4) 만약 이렇게 했는데 깨진다면, 웹브라우저 인코딩이 어떻게 돼있는지 확인한다.
확인 방법은, 우클릭 후 인코딩 항목을 찾아서 UTF-8로 강제 설정해본다.
5) 4번 과정 후, 제대로 출력된다면 아파치 설정이 이상한 것이다.
6) 더 확실 한 것은 웹브라우저의 디버깅 기능을 이용해서 아래와 같이 헤더를 확인하는 것이다.
아래는 크롬의 요소 검사 > Network 기능을 이용해 확인했다.
Firefox의 경우는 Firebug를 사용하면 확인 할 수 있다.
Accept-Charset에 euck-kr나 cp949가 있다면, 이를 변경해줘야 한다.
* Apache 설정
1) 아파치 설정은 서버마다 다르겠지만, 보통 아래 경로에 있다.
/etc/httpd/conf/httpd.conf
/etc/apache2/conf/httpd.conf
2) 위 파일을 열어서 AddDefaultCharset을 검색한다.
3) 그 후 AddDefaultCharset UTF-8 로 세팅을 해주고 아파치를 재시작한다.
아마 여기까지 했으면 제대로 출력 될거라 생각한다.
그래도 추가로 문자열이 깨진다!! 하면 Database에서 읽어오는 문자열이 UTF-8인지 확인해봐야한다.
MySQL의 경우, 데이터베이스, 테이블, 컬럼에서 사용하는 charset이 각각 다르다.
전부 체크해 utf8_general_ci로 바꿔주면 된다.
만약 EUC-KR 로 서버를 바꾸고 싶다면 위 과정을 전부 EUC-KR로 바꿔서 해주면된다.
'Web' 카테고리의 다른 글
IIS 500 에러 Stacktrace 남기기(Trace Failed Requests not found) (0) | 2013.10.10 |
---|---|
PHP - 문자열과 숫자 0비교 에러 (0) | 2012.05.30 |
PHPExcel - PHP로 excel 파일 읽고 쓰기 (0) | 2012.05.25 |
JQuery - select 박스 첫 번째 인덱스로 바꾸기 (0) | 2012.03.07 |
&nbsp; &amp; &lt; &gt; &quot;의 의미? (0) | 2012.01.17 |
Comments