“문자셋”이 실제로 일반적으로“인코딩”을 의미하는 이유는 무엇입니까?


10

오랫동안 혼란 스러웠던 것은 너무 많은 소프트웨어가 "문자셋"과 "인코딩"이라는 용어를 동의어로 사용한다는 것입니다.

사람들이 유니 코드 "인코딩"을 언급 할 때, 유니 코드 문자를 ASCII 또는 UTF-8과 같은 바이트 시퀀스로 나타내는 규칙 집합을 의미합니다. 이것은 합리적이고 직관적 인 것 같습니다. 아이디어는 지정된 규칙 세트를 사용하여 해당 문자를 바이트로 "인코딩"하는 것입니다.

그 규칙 세트 때로는에만 모든 유니 코드 문자의 일부 부분 집합 "인코딩"할 수있는 기능을 제공하기 때문에, 당신이 상상할 수있는 '문자 세트'에 대한 짧은 - - 방법에 대한 어떤 관계없이 - 단순히 유니 코드 문자 집합을 의미하는 것 "캐릭터 세트"고 해당 문자가 인코딩됩니다. 따라서 인코딩은 문자 세트 (128 문자 인코딩 규칙 만있는 128 문자의 문자 세트와 연관된 ASCII와 같은 인코딩)를 의미하지만 문자 세트는 인코딩을 의미 할 필요는 없습니다 (예 : UTF-8, UTF) -16과 UTF-32는 모두 다른 인코딩이지만 동일한 문자 집합을 인코딩 할 수 있습니다).

그러나-그리고 여기 내 질문의 요점-단어 "charset"의 실제 사용이 단어의 구성이 암시하는 것과 일치하지 않습니다. 거의 항상 "인코딩"을 의미합니다.

예를 들면 다음과 같습니다.

  • charsetHTML 의 속성은 인코딩을 지정하는 데 사용됩니다
  • CharsetJava의 인코딩은
  • charset그리고 character setsMySQL에서는 다시 한 번 인코딩입니다.

이 호기심 많은 언어의 사용은 몇 살이며, '문자셋'에 대한 반 직관적 인 정의는 어떻게 존재하게 되었습니까? 실제로 사용중인 인코딩과 지원하는 문자 집합 사이에 실제로 일대일 매핑 이 있었던 시점에서 시작 되었습니까? 아니면이 단어의 정의를 지시하는 영향력있는 표준이나 사양이 있습니까?


5
사용은 charset유니 코드 표준보다 이전 버전이므로 "일대일 매핑"이 아닐 수 있지만 문서에 필요한 문자는 인코딩 선택을 강요하는 경향이있었습니다. 그러나 나는 그 단어의 실제 역사를 연구 할 시간이 없다 ...
AmeliaBR

2
누군가가 유니 코드로 시작한 다음 서브 세트를 선택한 것처럼 문자 세트에 대해 "유니 코드 문자 세트"라고 말합니다. 유니 코드가 발명되기 전에 (또는 적어도 유니 코드가 유비쿼터스가되기 전에) 많은 문자 세트가 존재한다고 말하는 것이 더 정확하며, 유니 코드는 의도적으로 상위 세트가되도록 구성됩니다.
John Bartholomew

답변:


3

문자 집합의 개념은 유니 코드보다 오래되었습니다.

유니 코드 이전에 문자 세트는 문자 세트 각 문자가 비트로 표시되는 방식을 정의했습니다 . 대부분의 문자 세트는 문자를 바이트 (256 문자 세트 허용)에 맵핑하고 일부는 2 바이트에 맵핑하고 일부는 ASCII와 같은 7 비트에 맵핑했습니다. 다른 문자 세트는 종종 동일한 문자에 다른 값을 할당했으며 사용중인 다양한 문자 세트간에 범용 변환 키가 없었습니다.

유니 코드는 다양한 "문자 세트"를 모두 공통 "슈퍼 셋"으로 통합하여이 문제를 해결하려고했습니다. 이를 위해 유니 코드는 코드 레벨 값과는 다른 문자 인코딩 개념과 같은 몇 가지 추가 추상화 레벨을 도입했습니다 . 이를 통해 유니 코드 는 사전 유니 코드 문자 세트를 유니 코드 문자 인코딩 으로 재정 의 할 수있었습니다 .

예를 들어 HTML의 charset 속성 (HTTP 컨텐츠 유형 헤더에서 charset 매개 변수를 미러링 함)은 유니 코드가 널리 채택되기 전의 것이지만 유니 코드를 인터넷의 범용 문자 세트로 채택하기로 결정했을 때, charset 속성 사용중인 인코딩 을 지정하도록 방금 다시 정의 되었지만 이전 버전과의 호환성을 위해 이름이 변경되지 않았습니다.


9

"문자 세트"라는 용어는 물론 "문자 세트"의 약자이며, 이는 문자 인코딩에 사용되는 오래된 용어로 a) 바이트 시퀀스와 문자 간의 매핑, b) 정수 간의 매핑으로 해석 될 수 있습니다. (코드 번호) 및 문자 c) 추상 문자와 정수 또는 바이트 시퀀스 간의 매핑

“문자 세트”는 짧고 간단한 표현이므로 사용되었습니다. 그것에서 "set"은 모호한 의미를 갖지만 (전체 개념이 모호하기 때문에) 나중에 Dan Connelly의 (한 번) 유명한 Character Set에 설명 된 것처럼 집합 (이론적 의미에서 "set")으로 잘못 해석되었습니다. 해로운 것으로 간주 됩니다.

가장 중요한 것은 식별자 charset가 MIME 및 HTTP에서 사용되었다는 것입니다. HTTP 1.0 별칭 RFC 1945는 MIME 정의를 인용합니다.“하나 이상의 테이블에서 옥텟 시퀀스를 문자 시퀀스로 변환하는 데 사용되는 방법”을 인용 한 다음 혼동에 대해 다음과 같이 언급합니다. 일반적으로 '문자 인코딩'이라고합니다. 그러나 HTTP와 MIME은 동일한 레지스트리를 공유하므로 용어도 공유하는 것이 중요합니다.”


1

RFC2045 는 "문자 세트"를 MIME에 도입했으며 그 당시까지는 모든 인코딩이 하나의 문자를 하나의 옥텟으로 매핑하지는 않았습니다. RFC2130 은이 이력에 대해 조금 더 설명합니다.

기본적으로 "문자 세트"는 이러한 표준을 작성할 때 더 널리 사용되는 용어로 "문자 인코딩"또는 "텍스트 인코딩 체계"보다 간결하며 "인코딩"보다 모호하지 않습니다.


'charset'매개 변수가 이미 RFC 1341 (1992 년 6 월)에 존재 한 것 같습니다.
John Bartholomew

1

텍스트 전송에 적용 가능한 인코딩이 2 개 이상 있습니다. 문자 인코딩은 문자 (문자 모양)가 어떻게 인코딩되는지를 설명합니다. 모든 언어는 UCS 문자 집합의 하위 집합을 사용하며 종종 8 비트 값으로 인코딩됩니다. 표준화 된 문자 집합에는 표준 문자 인코딩이 있으며 일반적으로이 용어는 서로 바꿔 사용할 수 있습니다.

전송 인코딩은 텍스트가 전송되는 방식을 설명하며 일반적으로 문자 인코딩과 무관합니다. 대부분의 전송 인코딩은 투명하지 않으며 전송중인 바이트 순서를 변경합니다. 8 비트 전송 인코딩은 8 비트 인코딩에 투명합니다. 7 비트 전송 인코딩은 ASCII와 같은 7 비트 문자 세트 만 전송할 수 있습니다.

ASCII는 7 비트로 인코딩 된 캐리지 제어 (줄 바꿈, 용지 공급, 캐리지 리턴, 백 스페이스 및 탭)에 95 개의 인쇄 가능 문자와 몇 가지 문자를 사용합니다. 나머지 값을 사용하는 추가 제어 문자가 있습니다. ASCII는 UCS 문자 세트와 8 비트 문자 세트의 적절한 서브 세트입니다. ISO-8859-1은 UCS 문자 집합의 적절한 하위 집합이지만 UTF-8에서 다른 인코딩을 사용하므로 127보다 큰 문자 값에 여러 바이트를 사용합니다.

IBM 메인 프레임은 다른 8 비트 인코딩을 사용한 EBCDID를 사용 (d)합니다. ASCII와 ECBDIC 문자 인코딩간에 인쇄 가능한 문자를 맵핑하는 변환 표가 있습니다. ECBDIC에는 ASCII에서 사용할 수없는 문장 부호가 있기 때문에 ASCII보다 큰 문자 집합이 있습니다. 초기 인코딩이 ECBDIC 인 경우이 두 인코딩 간의 전체 왕복 변환을 방지 할 수 있습니다.

ASCII 인쇄 가능 문자로 처리되지 않는 문자가있는 언어에는 이러한 인코딩으로 충분하지 않습니다. Microsoft와 다른 회사는 ASCII 문자 집합에 8 비트 확장명을 사용하고 127보다 큰 값을 가진 추가 문자를 인코딩했습니다. 이러한 확장명은 문자 집합에 최대 96자를 추가하기 때문에 모든 언어에 대해 단일 확장명으로는 충분하지 않았습니다. 이로 인해 8 비트 문자 인코딩이 다른 여러 언어에 여러 문자 세트 (문자 세트)가 사용되었습니다. 이 문자 세트에는 해당 언어 또는 언어 제품군에 필요한 문자가 포함됩니다. 추가 문자는 다른 문자 집합에서 다른 값으로 인코딩 될 수 있습니다. 영어 사용자는 잘못된 문자 집합을 사용하는 경우 확장 된 문장 부호 (왼쪽 및 오른쪽 따옴표 및 대시)로이를 알 수 있습니다.

단일 바이트 인코딩의 경우 문자 세트의 문자 만 인코딩 할 수 있습니다. 일부 언어는 문자 세트를 포함하기 위해 멀티 바이트 인코딩이 필요했습니다. 유니 코드 (UCS) 문자 세트에는 ASCII 문자 세트 외부의 문자에 대한 멀티 바이트 인코딩이 필요합니다. 이 문자 집합은 모든 언어 별 인코딩의 상위 집합입니다. UTF-8은 UCS 문자 세트의 컴팩트 인코딩입니다. ASCII에는 추가 바이트가 필요하지 않으며 대부분의 유럽 언어 문자는 1 또는 2 바이트로 인코딩 될 수 있습니다. 전체 UCS-2 문자 세트는 1-3 바이트로 인코딩 될 수 있습니다. 현재 UCS 문자 세트의 모든 문자를 1-4 바이트로 인코딩 할 수 있습니다.


0

FWIW, IIRC, Commodore에서 64 일 전, 문자 집합은 {0, ... 255}에서 u와 v가 8과 12 일 수있는 모든 uxv 흑백 이미지 집합에 대한 함수였습니다. 문자 세트 "는 기본 언어에서 POKE 명령을 사용하여 해당 이미지를 보유하도록 지정된 메모리 위치를 수정하는 것을 의미합니다. 예를 들어 ASCII 코드 65는 A를 의미하며 A의 이미지는 일부 b의 메모리 주소 a * 65 + b에서 시작하여 저장되며 a = u * v로 추측됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.