Encoding 문제 찾기
2017-06-29 00:00:00Encoding
인코딩은 텍스트를 바이트로 변환하는 작업입니다.
참조 문서에서 정리한 글입니다.
- ASCII는 영어 알파벳 기반의 7비트 인코딩입니다.
- é 및 æ와 같은 127개의 비표준 문자를 추가하여 8비트 인코딩으로 확장합니다.
- 이후 모든 언어의 표준을 위해 UTF-8 인코딩이 등장합니다.
Website Encoding
가장 신뢰할만한 방법은 일단 브라우저 인코딩을 확인하는 것입니다.
Internet Explorer는 문자 인코딩의 MIME을 제공하지 않으므로 Description을 이용해 찾아야 합니다. 다음은 일반적인 것들입니다.
| IE description | MIME name |
|---|---|
| Windows | |
| Arabic (Windows) | Windows-1256 |
| Baltic (Windows) | Windows-1257 |
| Central European | (Windows) Windows-1250 |
| Cyrillic (Windows) | Windows-1251 |
| Greek (Windows) | Windows-1253 |
| Hebrew (Windows) | Windows-1255 |
| Thai (Windows) | TIS-620 |
| Turkish (Windows) | Windows-1254 |
| Vietnamese (Windows) | Windows-1258 |
| Western European (Windows) | Windows-1252 |
| ISO | |
| Arabic (ISO) | ISO-8859-6 |
| Baltic (ISO) | ISO-8859-4 |
| Central European (ISO) | ISO-8859-2 |
| Cyrillic (ISO) | ISO-8859-5 |
| Estonian (ISO) | ISO-8859-13 |
| Greek (ISO) | ISO-8859-7 |
| Hebrew (ISO-Logical) | ISO-8859-8-l |
| Hebrew (ISO-Visual) | ISO-8859-8 |
| Latin 9 (ISO) | ISO-8859-15 |
| Turkish (ISO) | ISO-8859-9 |
| Western European (ISO) | ISO-8859-1 |
| Other | |
| Chinese Simplified (GB18030) | GB18030 |
| Chinese Simplified (GB2312) | GB2312 |
| Chinese Simplified (HZ) | HZ |
| Chinese Traditional (Big5) | Big5 |
| Japanese (Shift-JIS) | Shift_JIS |
| Japanese (EUC) | EUC-JP |
| Korean | EUC-KR |
| Unicode (UTF-8) | UTF-8 |
Embedded encoding
웹 개발자가 문자 인코딩을 지정할 곳이 META 태그에도 있습니다.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
이는 HEAD 섹션에서 찾을 수 있으며 charset의 텍스트는 claim 인코딩입니다. HTML은 이 인코딩이라고 주장하지만 실제 적용되는지의 여부는 다른 요소에 따라 결정됩니다.
- 브라우저의 문자 인코딩과 동일하거나
- 브라우저의 문자 인코딩과 다르거나
META태그가 전혀 없는 경우…
웹 서버에서 전송되는 Content-Type HTTP 헤더에도 다음과 같은 형식으로 포함될 수 있습니다.
Content-Type: text/html; charset=ISO-8859-1
하지만 헤더와 태그는 결국 실제 웹 페이지의 실제 문자를 설명할 뿐이라는 것을 유념해야 합니다.
웹페이지가 다음과 같은 경우 조치를 취할 수 있습니다.
-
특수문자를 사용하고, 가끔 제대로 보일 경우 임베디드 인코딩을 서버 인코딩으로 변경합니다.
-
특수문자를 사용하지만 문자가 깨져서 나올 경우 서버 인코딩을 임베디드 인코딩으로 변경합니다.
form을 사용한 양식 제출은 두가지 유형이 있습니다.
- application/x-www-form-urlencoded GET과 기본 POST 요청에 사용
- multipart/form-data 파일 업로드 같은 POST 요청에 사용
그러나 일단 인코딩 외부에서 문자를 추가하기 시작하면 (예 : Microsoft에서 곱슬 곱슬 한 "스마트"따옴표를 예로들 수 있습니다.) 이상한 일들이 발생하기 시작합니다. 이때는 지원되지 않는 문자를 물음표로 대체하거나 일반 문자 또는 엔티티 참조로 수정하거나 원본 인코딩과 혼합된 다른 문자 인코딩(일반적으로 Windows-1252가 아닌 iso-8859-1 또는 UTF-8이 8 비트로 산재되어 있음)으로 전송합니다.
이러한 행동을 방지하려면 브라우저 agent를 스니핑하고 다른 동작의 데이터베이스를 컴파일 후 적절한 변환 조치를 취해야 합니다.
결국 UTF-8이 모든 문자를 지원함으로써 모든 문제를 해결 할 수 있음을 알게 될 것입니다.
POST 요청일 경우 Accept-Encoding 헤더를 UTF-8로 설정하는 방법도 있습니다. 이때는 데이터가 UTF-8 형식이 될 것이므로 명시적으로 선호하는 로컬 문자 인코딩으로 변환해야 합니다.
문자를 표시하는 적절한 글꼴이 부족하여 발생하는 문제도 있습니다.