반응형
16.1 국제적인 콘텐츠를 다루기 위해 필요한 HTTP 지원
- 서버 => 클라이언트 : HTTP Content-Type charset 매개변수와 Content-Language 헤더를 통해 문서의 문자와 언어를 알려준다.
- 클라이언트 => 서버 : Accept-Charset과 Accept-Language 헤더를 보내 어떤 charset 인코딩 알고리즘과 언어들을 이해하고 선호하는지 알려준다.
Accept-Language: fr, en;q=0.8
Accept-Charset: iso-8859-1, utf-8
q=0.8은 품질 인자로, 기본값 프랑스어(fr)보다 영어(en)에 낮은 우선순위를 주었다. (0.0에 가까울수록 낮은 우선순위)
16.2 문자집합과 HTTP
HTTP Charset은 엔터티 콘텐츠 비트들을 어떻게 특정 문자 체계의 글자들로 바꾸는지 말해주며, 각 차셋 태그는 비트->글자, 글자->비트로 변환하는 알고리즘을 명명한다. 차셋 태그는 등록된 MIME 문자집합에 표준화되어 있고, IANA가 관리한다.
Content-Type: text/html, charset=iso-8859-6
위 예시에서는 iso-8859-6 아랍 문자집합 디코딩 기법을 사용할 것을 말해준다. iso-8859-6 인코딩 구조는 8비트 값을 숫자와 구두점, 다른 기호들을 포함한 라틴 문자와 아랍 문자로 매핑한다. UTF-8과 iso-2022-jp 등 몇몇 문자 인코딩은 글자 당 비트 수가 일정하지 않아 더 복잡한 가변길이 코드를 가지는데, 중국어/일본어와 같이 많은 글자로 이루어진 문자체계를 지원하기 위해 추가적인 비트를 사용할 수 있게 해준다.
문자집합과 인코딩 동작 방식
- 글자의 모양을 어떻게 표현할 것인가는 사용자의 그래픽 디스플레이 소프트웨어(브라우저, 운영체제, 글꼴)가 결정한다.
- 클라이언트가 잘못된 charset 매개변수를 사용하면 클라이언트는 이상한 글자를 보여줄 것이다.
MIME 차셋
- 특정 문자 인코딩과 특정 코딩된 문자집합의 결합을 MIME 차셋이라 부른다.
- 표준화된 MIME 차셋 태그를 Content-Type과 Accept-Charset 헤더에 사용한다.
- MIME 차셋 값은 IANA에 등록되어 있다.
HTML 콘텐츠에서 문자 집합은 문자 집합을 서술하는 meta 태그에서 찾을 수 있다. 만약 문서가 HTML이 아니거나 meta 태그가 없는 경우 실제 텍스트를 스캐닝하여 문자 인코딩을 추측한다.
Content-Type: text/html; charset=iso-2022-jp
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-2022-jp" >
16.3 다중언어 문자 인코딩에 대한 지침
문자집합 용어
- 문자 : 알파벳 글자, 숫자, 구두점, 표의문자(ex. 중국어), 기호 등 글쓰기의 최소 단위
- 글리프 : 하나의 글자를 표현하기 위한 획의 패턴이나 다른 것과 구분되는 유일한 시각적 형태
- 코딩된 문자 : 각 글자에 할당된 유일한 숫자
- 코드 공간 : 문자 코드 값으로 사용하려고 계획해 둔 정수의 범위
- 코드 너비 : 각 문자 코드의 비트 개수
- 사용 가능 문자집합 : 글자들에 대한 특정한 작업 집합
- 코딩된 문자집합 : 실제 글자들에 숫자로 된 문자 코드를 대응시킨 것
- 문자 인코딩 구조 : 숫자로 된 문자 코드들을 콘텐츠 비트의 연속으로 인코딩/디코딩하는 알고리즘
코딩된 문자집합
- US-ASCII : '정보교환을 위한 미국 표준 코드'로 표준화된 가장 유명한 코딩된 문자집합이다. 아스키는 0-127만 사용하며 코드 공간 전체를 표현하는데 7비트만이 필요하다. HTTP 메시지는 US-ASCII를 사용한다.
- iso-8859 : US-ASCII의 8비트 확대집합들이다. 추가 비트에 의해 제공되는 추가 공간은 모든 국가의 글자를 담기에는 충분하지 않기 때문에 지역에 따라 커스터마이징된 문자집합을 제공한다.
- JIS X 0201 : 아스키를 일본어 가타카나 반각문자를 더해 확장한 극단적으로 작은 문자집합이다.
- JIS X 0208과 JIS X 0212 : 최초의 멀티바이트 일본어 문자집합이다.
- UCS : 전 세계의 모든 글자를 하나의 코딩된 문자집합으로 통합하려 노력하는 세계적인 표준이다.
문자 인코딩 구조
문자 인코딩 구조 종류 구분
- 고정폭 : 각 코딩된 문자를 고정된 길이의 비트로 표현한다.
- 가변폭(비모달) : 다른 문자 코드 번호에 다른 길이의 비트를 사용한다. 자주 사용하는 글자의 비트 길이는 줄이고 국제 문자에 대해서는 여러 바이트를 사용하며 이전의 8비트 문자집합과의 호환성도 유지가 가능하다.
- 가변폭(모달) : 다른 모드로의 전환을 위해 특별한 'escape' 패턴을 사용한다. 모달 인코딩은 처리하기 복잡하지만 복잡한 표기 체계를 효과적으로 지원할 수 있다.
인코딩 구조 예시
- 8비트 : 8비트 고정폭 아이덴티티 인코딩은 각 문자 코드를 그에 대응하는 8비트 값으로 인코딩한다.
- UTF-8 : 비모달 가변길이 인코딩을 사용한다. 선두 비트들은 인코딩된 문자의 길이를 바이트 단위로 나타내고, 그 이후의 바이트들은 각각 6비트의 코드 값을 담는다.
- iso-2022-jp : 일본어 인터넷 문서를 위해 널리 사용되는 인코딩이며 가변길이 모달 인코딩이다.
- euc-jp : 일본어 인코딩이며 가변길이 인코딩이다. iso-2022-jp와는 달리 비모달 방식이며 모드 간의 전환을 위한 이스케이프 문자열이 존재하지 않는다.
- euc-kr : 한글 인터넷 문서를 위해 널리 사용되는 가변길이 인코딩으로 KS X 103, KS X 1001 두 가지 문자 집합을 지원한다. KS X 1001은 2바이트로 인코딩되는 한글, 한자, 그 외 특수문자들로 이루어진 한국어 문자 집합이다.
반응형
'개발' 카테고리의 다른 글
[99클럽] 알고리즘 TIL: 백준 32953번 회상 - JavaScript (0) | 2025.01.24 |
---|---|
[99클럽] 알고리즘 TIL: 백준 31562번 전주 듣고 노래 맞히기 - JavaScript (1) | 2025.01.24 |
[HTTP 완벽 가이드] 15장 엔터티와 인코딩 15.4~15.10 (0) | 2025.01.22 |
[99클럽] 알고리즘 TIL: 백준 27160번 할리갈리 - JavaScript (0) | 2025.01.21 |
[99클럽] 알고리즘 TIL: 백준 15829번 Hashing - JavaScript (0) | 2025.01.21 |