✊ 필오의 개발일지
Back to Posts
2020년 1월 13일

국제화

국제화


국제적인 콘텐츠를 다루기 위해 필요한 HTTP 지원

Accept-Language: fr, en;q=0.8 Accept-Charset: iso-8859-1, utf-8

1. 문자 집합과 HTTP

1.1 Charset은 글자를 비트로 변환하는 인코딩이다.

1.2 문자집합과 인코딩은 어떻게 동작하는가

  1. 비트 => 문자로 변환 (의미 해석) - 02. HTTP
  2. 문자 => 모양으로 표현 (시각적 표현) - 브라우저, 운영체제, 글꼴이 결정

1.3 잘못된 Charset은 잘못된 글자들을 낳는다.

브라우저가 본문으로부터 225 (11100001)을 가져온 경우

1.4 표준화된 MIME Charset 값

MIME 차셋 인코딩 태그

euc-kr과 utf-8 참고  euc-kr 방식은 원래 영어만을 고려한 1byte 길이의 ASCII 라는 인코딩 방식을 확장하여 한글을 사용할 수 있도록 만든 2byte 길이의 국가 언어 코드입니다. 국가 언어코드. 즉 우리나라에서만 쓸 수 있도록 만든 코드이며 세계 어디에서나 공통으로 사용되는 인코딩 방식이 아니기 때문에, 다른 언어를 사용하는 환경(외국 등)에서는 한글 페이지를 제대로 볼 수 없는 문제가 발생합니다. 이를 해결하기 위해 새로운 인코딩 방식이 개발되었는데, 그중 가장 보편화된 인코딩이 UTF-8입니다. (3byte) 예전에는 용량이 작은 euc-kr 방식을 선호하는 곳들도 많았으나, 현재는 용량 문제보다 표준화 및 글로벌 환경을 고려해야 하므로 UTF-8 인코딩 방식을 강력하게 권고하는 바입니다.

1.5 Content-Type charset 헤더와 메타태그

  1. 웹 서버는 클라에게 MIME charset 태그를 charset 매개변수와 함께 Content-Type 헤더에 담아 보낸다.
Content-Type: text/html; charset=utf-8
  1. 만약 나열되지 않았다면, 수신자는 문서의 콘텐츠로부터 문자집합을 추측하려고 시도한다.

  2. 받은 HTML 파일에서 meto태그중 HTTP-EQUIV라는 속성을 갖고 있는 태그를 찾는다.

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
  3. 만약 문서가 html이 아니라면, 혹은 meta Content-Type 태그가 없다면, 소프트웨어는 언어와 인코딩에 대한 일반적인 패턴을 찾기 위해 실제 텍스트를 스케닝하여 문자 인코딩을 추측한다.

  4. 클라가 문자 인코딩을 추측하지 못했다면 iso-8859-1인것으로 가정한다.

1.6 Accept-Charset 헤더

Accept-Charset: iso-8859-1, utf-8

2. 다중언어 문자 인코딩에 대한 지침

문자집합 용어

  1. 문자 : 글쓰기의 최소단위.
  2. 글리프 glyph
  1. 코딩된 문자 coded character
  1. 코드 공간 coding space
  1. 사용 가능 문자집합 character repertoire
  1. 코딩된 문자집합 coded character set
  1. 문자 인코딩 구조

자세히 알아보기

  1. 문자
  1. 글리프(glyphs), 연자(ligatures), 표현형태
  1. 코딩된 문자집합 Coded Character Set

  1. US-ASCII (모든 문자집합의 어머니)

    • 1968년 ANSI 표준 X3.4 ‘정보교환을 위한 미국 표준 코드’로 표준화된 가장 유명한 코딩된 문자집합이다.
    • 아스키는 오직 코드 값 0~127만 사용한다.
    • 코드 공간을 전체 표현하는데 7비트만 필요하다.
    • 다른 국제 변종과 구분하기 위해 ‘US-ASCII’를 더 선호한다.
  2. iso-8859

    • US-ASCII 의 8비트 확대 집합들이다.
      • 국제적인 글쓰기를 위해 필요한 글자들을 하이비트를 이용하여 추가
    • 추가비트에 의해 제공되는 추가공간은 모든 유럽 글자를 담기에는 충분히 크지 않으므로, iso-8859는 지역에 따라 커스터마이징된 문자집합을 제공한다.
      1. iso-8859-1 : 서유럽어 (영어, 프랑스어) (= Latin1) - HTML을 위한 기본 문자집합
      2. iso-8859-2 : 중앙 및 동유럽어 (체코어, 폴란드어)
      3. iso-8859-3 : 남유럽어
      4. iso-8859-4 : 북유럽어
      5. iso-8859-5 : 키릴 (불가리아어, 러시아어, 세르비아어)
      6. iso-8859-6 : 아랍어
      7. iso-8859-7 : 그리스어
      8. iso-8859-8 : 히브리어
      9. iso-8859-9 : 터키어
      10. iso-8859-10 : 노르딕어 (아이슬랜드어, 이뉴잇어)
      11. iso-8859-15 : 새로운 유로 통화 문자를 포함하기 위한 iso-8859-1의 변형
  3. JIS X 0201

    • 일본어 가타카나 반각문자를 더해, 확장한 극단적으로 작은 문자집합
    • = JIS ROMAN 으로 불린다. (JIS = Japanese Industrial Standard = 일본 산업 표준)
  4. JIS X 0208과 JIS X 0212

    • 일본어는 여러 문자 체계로부터 온 수천개의 글자를 담고 있다.
    • JIS X 0201의 63개 표음 가타카나 문자보다 완전한 문자집합이 필요하다.
    • JIS X 0208은 최초의 멀티바이트 일본어 문자집합이다. = 일본식 한자인 6879개의 코딩문자를 정의했다.
    • JIS X 0212 문자집합은 6607개의 문자를 추가했다.
  5. UCS

    • 국제 문자 셋트 Univeral Character Set 은 전 세계의 모든 글자를 하나의 코딩된 문자집합으로 통합하려 노력하는 세계적인 표준이다.
    • UCS는 ISO 10646으로 정의된다.
    • 유니코드는 UCS 표준을 따르는 상업적인 컨소시업이다.
    • UCS는 기본 집합은 단 50,000 글자만으로 이루어져 있음에도 불구하고, 수백만개의 글자를 위한 코드공간을 갖고 있다.
  6. 문자 인코딩 구조


  1. 고정폭

    • 각 코딩된 문자를 고정된 길이의 비트로 표현한다.
    • 빠르게 처리될 수 있지만 공간을 낭비할 우려가 있다.
  2. 가변폭 (비모달)

    • 다른 문자 코드 번호에 다른 길이의 비트를 사용한다.
    • 자주 사용하는 글자의 비트 길이를 줄일 수 있고, 국제 문자에 대해서는 여러 바이트를 사용하도록 함으로써 이전의 8비트 문자집합과의 호환성도 유지할 수 있다.
  3. 가변폭 (모달)

    • 다른 모드로의 전환을 위해 특별한 escape 패턴을 사용한다.
    • 예를 들어 어떤 모달 인코딩은 텍스트에서 중첩된 여러가지 문자집합 간의 전환을 위해 사용될 수 있다.
    • 모달 인코딩은 처리하기 복잡하지만, 복잡한 표기 체계를 효과적으로 지원해 줄 수 있다.

  1. [고정폭] 8비트

    • 간단히 각 문자 코드를 그에 대응하는 8비트 값으로 인코딩한다.
    • 256개 문자의 코드 범위에 대한 문자집합만을 지원한다.
    • iso-8859 문자집합군은 8비트 아이덴티티 인코딩을 사용한다.
  2. [가변폭(비모달)] UTF-8

    • 인기있는 UCS를 위해 설계된 문자 인코딩 구조다. (UTF = UCS Transformation Format)
    • 첫 바이트의 서두 비트들은 인코딩된 문자의 길이를 바이트 단위로 나타내고, 그 이후의 바이트들은 각 6비트 코드값을 담는다. (0ccccccc, 110ccccc,…)
    • 문자 코드 90(아스키 ‘Z’)는 1바이트로 인코딩 되었을 것이며(01011010), 코드 5073(13비트 이진값 100111101001)은 3바이트로 인코딩되었을 것이다.
  3. [가변폭(모달)]iso-2022-jp

    • 일본어 인터넷 문서를 위해 널리 사용되는 인코딩이다.
    • 128보다 작은 값으로만 이루어진 가변길이 모달 인코딩이다.
    • 인코딩 콘텍스트는 4가지 미리 정의된 문자집합 중 하나로 설정된다.
      • 특별한 이스케이프 문자열(ESC ( B, ESC ( J, ESC $ @, ESC $ B)은 한 집합에서 다른 집합으로 전환시켜준다. (모달)
  4. [가변폭(비모달)]euc-jp

    • 일본어 인코딩
    • EUC는 Extended Unix Code의 약자
    • 유닉스 운영체제에서 아시아 문자들을 지원하기 위해 처음 개발되었다.
    • 모드간의 전환을 위한 이스케이프 문자열이 없다.
    • euc-jp는 4가지 코딩된 문자집합을 지원한다. (JIS X 0201, JIS X 0208, 반각 가타카나, JIS X 0212)
  5. [가변폭(비모달)]euc-kr

    • 한글 인터넷 문서를 위해 널리 사용되는 가변길이 인코딩
    • 2가지 문자집합을 지원한다. (KS X 1003, KS X 1001)
    • KS X 1001은 총 2350자만 담고 있었고 표현하기에는 부족
      • 이를 보완하기 위해 한글 채움문자를 이용해 한글을 표현하는 방식을 규정하고 있다.

Charset은 문자집합이 아닌 매핑 알고리즘의 이름이다.


언어태그와 HTTP

  1. Content-Language 헤더
  1. Accept-Lanugage 헤더
  1. 언어 태그의 종류 ([RFC 3066] 기준)
  1. 서브태그
  1. 주 서브태그 : 표준화되어 있다. - 알파벳만
  2. 두번째 서브태그: 자신만의 이름 표준을 따름 (선택적) - 알파벳 + 숫자가능 (최대 8글자)
  3. 서브태그는 등록되어 있지 않다.

  1. 첫번째 서브태그 : 이름공간

    • ISO 639 표준 언어 집합에서 선택된 표준화된 언어 토큰
    • 첫번째 서브태그가
      • 두 글자라면, ISO 639와 639-1 표준의 언어코드다.
      • 세 글자라면, ISO 639-2표준과 확장에 열거된 언어코드다.
      • 글자가 i라면, IANA에 등록된 것
      • 글자가 x라면, 특정 개인이나 집단 전용의 비표준 확장 서브태그다.
    • 한국어 : ko(ISO 639) / kor(ISO 639-2)
    • 영어 : en(ISO 639) / eng(ISO 639-2)
  2. 두번째 서비태그: 이름공간

    • ISO 3166 국가 코드와 지역 표준 집합에서 선택된 표준화된 국가토큰이다.
      • IANA에 등록된 다른 문자열일 수도 있다.
    • 두번째 서브태그는
      • 두글자라면 ISO 3166에 정의된 국가/지역이다.
      • 3~8 글자라면, IANA에 등록된 것이다.
      • 한글자라면, 문가 잘못된 것..
    • 일본: JP
    • 인도: IN
  3. 나머지 서브태그: 이름공간

    • 8자 이하의 알파벳과 숫자로 이루어져야 한다는 것을 제외하면 다른 규칙은 없다.

국제화된 URI

  1. 국제적 가독성 vs 의미있는 문자들
  1. URI에서 사용될 수 있는 문자들


  1. 이스케이핑과 역이스케이핑
  1. 국제 문자들을 이스케이핑하기
  1. URI에서의 모달 전환

기타 고려사항

  1. 헤더와 명세에 맞지 않는 데이터
  1. 날짜
  1. 도메인 이름


참고자료

Previous내용협상과 트랜스코딩
Next인스턴스 조작과 인코딩

Related

© 2025 Felix