가변 폭 부호화
Variable-width encoding가변폭 부호화는 문자 부호화 방식의 한 종류로, 길이가 다른 코드를 사용하여 표현하기 위한 문자 세트(기호의 레퍼토리)를 부호화합니다(보통 컴퓨터).[1][a]가장 일반적인 가변 폭 인코딩은 멀티바이트 인코딩입니다.다양한 바이트 수(옥텟)를 사용하여 다른 문자를 인코딩합니다(특히 Microsoft 문서에서는 표현 크기가 문자 집합의 속성이 아닌 인코딩의 속성이기 때문에 멀티바이트 문자 집합이라는 용어를 사용하는 작성자가 있습니다).
초기 마이크로컴퓨터의 어드벤처 게임에서는 문자당 1바이트 미만의 초기 가변 폭 인코딩을 사용하여 영어 텍스트를 더 적은 바이트로 압축하는 경우가 있었습니다.그러나 디스크(테이프와는 달리 온 디맨드로 텍스트를 로드할 수 있는 랜덤 액세스가 가능)는 컴퓨터 메모리와 범용 압축 알고리즘의 증가로 인해 이러한 기술은 거의 사용되지 않게 되었습니다.
멀티바이트 인코딩은 일반적으로 기존 제약 조건과의 하위 호환성을 해치지 않고 인코딩할 수 있는 문자 수를 늘려야 하기 때문에 발생합니다.예를 들어, 1 문자당 1 바이트(8 비트)로 256 문자를 부호화할 수 있습니다.256 문자보다 많은 문자를 부호화하기 위해서는 2 바이트(16 비트)로 65,536 문자를 사용할 수 있지만, 이러한 변경으로 인해 기존 시스템과의 호환성이 깨집니다.전혀 [b]실현 가능하지 않을 것이다.
일반구조
멀티바이트 부호화 시스템의 목적은 기존 응용 프로그램소프트웨어에 대한 변경을 최소화하는 것이기 때문에 일부 문자는 코드에 여러 개의 유닛이 있는 경우에도 기존의 단일 유닛 코드를 유지해야 합니다.그 결과 가변폭 부호화에는 싱글톤(단일 유닛으로 구성), 리드 유닛(멀티 유닛 시퀀스로 첫 번째), 트레일 유닛(멀티 유닛 시퀀스로 뒤에 오는)의 3종류의 유닛이 있습니다.입력 및 표시 소프트웨어는 멀티바이트 인코딩 방식의 구조를 알아야 하지만 다른 소프트웨어는 일반적으로 바이트 쌍이 두 개의 개별 문자를 나타내는지 또는 한 개의 문자만 나타내는지 알 필요가 없습니다.
예를 들면, 4개의 문자열 「I♥NY」는, 49 E2 99 A5 4E 59 와 같이 UTF-8 로 부호화된다(16 진수 바이트치로서 지정).이 시퀀스의 6개의 유닛 중 49, 4E, 59는 싱글톤(I, N, Y의 경우)이고 E2는 리드 유닛, 99 및 A5는 트레일 유닛입니다.심장 기호는 리드 유닛과 두 개의 트레일 유닛의 조합으로 표시됩니다.
UTF-8은 세 종류의 유닛이 별도의 값 범위에 속하기 때문에 프로그램에서 쉽게 식별할 수 있도록 합니다.오래된 가변 폭 인코딩은 범위가 중복될 수 있기 때문에 일반적으로 적절하게 설계되지 않습니다.가변폭 부호화를 처리하는 텍스트 처리 애플리케이션은 다양한 단위를 식별하고 텍스트를 올바르게 해석하기 위해 모든 최종 시퀀스의 선두에서 텍스트를 스캔해야 합니다.이러한 인코딩에서는 텍스트 중간에 문자열을 검색할 때 false positive가 발생할 수 있습니다.예를 들어 16진수치 DE, DF, E0 및 E1이 모두 리드 유닛 또는 트레일 유닛일 경우 2개의 연속된2개의 유닛시퀀스로 구성된 시퀀스 DE DF E0 E1에서 폴스 포지티브를 얻을 수 있습니다.또한 단일 장치가 손상되거나 손실되면 대규모 다중 장치 시퀀스의 전체 해석이 잘못될 수 있습니다.3종류의 유닛이 모두 분리되는 가변폭 부호화에서는 스트링 검색은 항상 false positive 없이 동작합니다.또한 (디코더가 올바르게 기술되어 있는 경우) 1개의 유닛이 파손되거나 손실되면 1개의 문자만 파손됩니다.
CJK 멀티바이트 인코딩
멀티바이트 인코딩은 256자를 훨씬 넘는 큰 문자 집합을 가진 중국어, 일본어, 한국어 인코딩에 처음 사용되었다.처음에 부호화는 7비트의 제한으로 제한되었습니다.ISO-2022-JP, ISO-2022-CN 및 ISO-2022-KR 인코딩에서는 리드 유닛과 트레일 유닛의 양쪽 모두에 21~7E(16진수)의 범위가 사용되었으며 싱글 바이트 모드와 멀티바이트 모드 사이에서 전환하기 위해 ISO 2022 이스케이프 시퀀스를 사용하여 싱글톤에서 제외되었습니다.처음에는 총 8,836자(94×94)의 문자를 인코딩할 수 있었고, 이후 전환으로 94×94자의 문자를 인코딩할 수 있었습니다.CJK의 ISO 2022 인코딩 방식은 여전히 인터넷에서 사용되고 있다.이러한 인코딩의 스테이트풀한 성질이나 큰 오버랩으로 인해 처리가 매우 곤란합니다.
Unix 플랫폼에서는 ISO 2022 7비트 인코딩이 8비트 인코딩 방식 세트인 EUC-JP, EUC-CN 및 EUC-KR로 대체되었습니다.멀티유닛 시퀀스와 이스케이프 시퀀스를 가진 싱글톤을 구별하는 대신 멀티유닛 시퀀스는 80~FF(16진수) 범위에 있는 반면 싱글톤은 00~7F 범위에 있었습니다.리드 유닛과 트레일 유닛은 A1 ~ FE(16진수) 범위에 있었습니다.즉, ISO 2022 인코딩의 범위와 동일하지만 높은 비트가 1로 설정되어 있습니다.이러한 인코딩은 모든 딜리미터가 ASCII 문자로 되어 있어 스트링을 고정 길이로 잘라내는 것은 피하지만 멀티바이트 문자의 중간에 끊어진 경우에도 큰 파손이 발생할 수 있습니다.
PC(DOS 및 Microsoft Windows 플랫폼)에서는 일본어 및 번체 중국어용으로 싱글톤, 리드 유닛 및 트레일 유닛이 모두 겹치는 2개의 인코딩이 확립되었습니다.각각 Shift-JIS와 Big5입니다.Shift-JIS에서 리드 유닛은 81-9F와 E0–FC, 트레일 유닛은 40-7E와 80–FC, 싱글톤은 21-7E와 A1–DF의 범위를 가졌다.Big5에서 리드 유닛의 범위는 A1 ~ FE, 트레일 유닛의 범위는 40 ~7E 및 A1 ~ FE, 싱글톤의 범위는 21 ~7E(16진수에서의 모든 값)였습니다.적어도 대부분의 기호가 고유한 바이트 값을 가지고 있었지만(이상하게도 백슬래시는 그렇지 않음) 이 중복으로 인해 처리가 까다로워졌습니다.
Unicode 가변 폭 부호화
Unicode 표준에는 UTF-8과 UTF-16의 2개의 가변폭 부호화가 있습니다(고정폭 부호화 UTF-32도 있습니다).원래 Unicode와 ISO 10646 규격은 모두 고정폭을 의미하며 Unicode는 16비트,[citation needed] ISO 10646은 32비트입니다.ISO 10646은 UTF-1이라고 불리는 가변 폭 인코딩을 제공했는데, 싱글톤은 00-9F, 리드 유닛은 A0-9F 범위입니다.FF 및 트레일 단위는 A0 ~ 범위입니다.FF 및 21~7E.Shift JIS 및 Big5와 같은 값의 중복으로 인해 Unicode를 최초로 구현한 Plan 9 운영체제의 개발자는 이를 버리고 Unicode: UTF-8을 위해 훨씬 더 잘 설계된 가변 폭 인코딩으로 대체했습니다. UTF-8에서는 싱글톤의 범위는 C0~7F입니다.실제로는 C2~F4를 사용하여 과도한 시퀀스를 회피하고 UTF-16의 부호화 용량과의 동기화를 유지합니다(UTF-8 문서를 참조).트레일 유닛의 범위는 80~BF 입니다.리드 유닛은 또한 얼마나 많은 트레일 유닛을 추종하는지 알려준다. 즉, C2–DF 다음에 1개, E0–EF 다음에 2개, [c]F0–F4 다음에 3개이다.
UTF-16은 16비트 부호화와의 호환성을 해치지 않고 원래 Unicode(1.x)의 65,536 문자 제한을 해제하도록 설계되었습니다.UTF-16에서는 싱글톤의 범위는 0000 ~D7입니다FF(55,296 코드 포인트) 및 E000-FFFF(8192 코드 포인트, 합계 63,488), 리드 유닛 범위 D800~DBFF(1024 코드 포인트) 및 트레일 유닛은 DC00 ~ DFFF 범위(1024 코드 포인트, 합계 2048)입니다.Unicode 용어에서는 각각 high replaces 및 low replaces라고 불리는 리드 유닛과 트레일 유닛은 1,112,064(BMP 코드 포인트 63,488 + high 및 low replaces 쌍으로 표시되는 1,048,576 코드 포인트)로 인코딩 가능한 코드 포인트 또는 스칼라 값(용어)을 나타냅니다.부호화 가능).
「 」를 참조해 주세요.
- wchar_t 와이드 문자
- Lotus Multi-Byte 문자 집합(LMBCS)
- 트리플 바이트 문자 집합(TBCS)
- 더블바이트 문자 집합(DBCS)
- 싱글 바이트 문자 집합(SBCS)
메모들
- ^ 그러나 이 개념은 모스 부호의 경우와 같이 전자 컴퓨터의 등장보다 훨씬 앞서 있다.
- ^ 그 실생활의 예로서 UTF-16은 가장 일반적인 문자를 앞에서 설명한 대로 정확하게 나타냅니다(또, 보다 일반적인 문자에 대해서는 16비트 코드 유닛의 페어를 사용).유비쿼터스 7-8비트 ASCII 인코딩과의 호환성이 없기 때문에, 교환을 목적으로 하는 텍스트의 인코딩으로서 트랙션을 얻지 못했습니다.대신 UTF-8에 의해 채택되어 ASCII 호환성이 유지됩니다.
- ^ UTF-8의 최초 버전에서는 1992년 발행된 이후 2003년 코드 공간이 UTF-16의 코드 공간으로 제한될 때까지 3유닛의 후행 시퀀스를 인코딩하는 리드 유닛의 범위가 더 컸습니다(F0-F7). 또한 리드 유닛 F8-FB는 4유닛, FC-FD는 5유닛의 후행 유닛이 뒤따랐습니다.FE-FF는 UTF-8의 어떤 버전에서도 유효한 리드 또는 트레일 유닛이 아니었습니다.
레퍼런스
- ^ Crispin, M. (April 2005). "UTF-9 and UTF-18 Efficient Transformation Formats of Unicode". doi:10.17487/rfc4042.
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말)