UTF-8 과 ISO-8859-1 의 차이점은 무엇입니까 ?
UTF-8 과 ISO-8859-1 의 차이점은 무엇입니까 ?
답변:
UTF-8은 모든 유니 코드 문자를 나타낼 수있는 멀티 바이트 인코딩입니다. ISO 8859-1은 첫 256 개의 유니 코드 문자를 나타낼 수있는 1 바이트 인코딩입니다. 둘 다 ASCII를 정확히 같은 방식으로 인코딩합니다.
Wikipedia는 UTF-8 과 Latin-1 (ISO-8859-1)을 합리적으로 잘 설명합니다 . 이전은 가변 길이 인코딩, 후자의 1 바이트 고정 길이 인코딩입니다. Latin-1은 유니 코드 문자 집합의 첫 256 코드 포인트 만 인코딩하지만 UTF-8은 모든 코드 포인트를 인코딩하는 데 사용할 수 있습니다. 물리적 인코딩 수준에서는 0-127의 코드 포인트 만 동일하게 인코딩됩니다. 코드 포인트 128-255는 UTF-8을 사용하는 2 바이트 시퀀스가되므로 다르지만 Latin-1을 사용하는 단일 바이트입니다.
UTF 는 최대 2 ^ 31 [약 20 억] 문자를 나타낼 수있는 유니 코드 코드 포인트를 나타낼 수있는 멀티 바이트 인코딩 체계의 제품군입니다 . UTF-8 은 1 ~ 4 바이트를 사용하여 첫 2 ^ 21 [약 2 백만] 코드 포인트를 나타내는 유연한 인코딩 시스템입니다.
간단히 말해 : 7 비트 안전 ASCII라고하는 코드 포인트 / 소수점 표현이 127 미만인 문자는 대부분의 다른 1 바이트 인코딩과 동일한 1 바이트 시퀀스로 표시됩니다. 코드 포인트가 127 이상인 모든 문자는 2 바이트 이상의 시퀀스로 표시되며 여기에서 가장 잘 설명 된 인코딩이 있습니다 .
ISO-8859 는 127에서 255 사이의 범위에서 표현 될 수있는 알파벳을 나타내는 데 사용되는 단일 바이트 인코딩 체계입니다. 이러한 다양한 알파벳은 가장 익숙한 ISO-8859- n 형식의 "부분"으로 정의됩니다. 이것은 아마도 ISO-8859-1 일명 '라틴 -1'일 것입니다. UTF-8과 마찬가지로 7 비트 안전 ASCII는 사용 된 인코딩 제품군에 관계없이 영향을받지 않습니다.
이 인코딩 체계의 단점은 128 개 이상의 기호로 구성된 언어를 수용 할 수 없거나 한 번에 두 개 이상의 기호 계열을 안전하게 표시 할 수 없다는 것입니다. 또한 ISO-8859 인코딩은 UTF의 등장으로 호의를 얻지 못했습니다. 2004 년에 해체 된 책임을 맡고있는 ISO "작업반 (Working Group)"은 부모 소위원회까지 유지 보수를 맡겼습니다.
ASCII : 7 비트 128 개의 코드 포인트.
ISO-8859-1 : 8 비트 256 코드 포인트
UTF-8 : 8-32 비트 (1-4 바이트). 1,112,064 코드 포인트.
ISO-8859-1 및 UTF-8은 모두 ASCII와 하위 호환되지만 UTF-8은 ISO-8859-1과 하위 호환되지 않습니다.
#!/usr/bin/env python3
c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))
산출:
©
b'\xc2\xa9'
b'\xa9'
ISO-8859-1은 1980 년대의 레거시 표준입니다. 256 자만 표현할 수 있으므로 서구의 일부 언어에만 적합합니다. 지원되는 많은 언어의 경우에도 일부 문자가 누락되었습니다. 이 인코딩으로 텍스트 파일을 만들고 일부 한자를 복사 / 붙여 넣기를 시도하면 이상한 결과가 나타납니다. 즉, 사용하지 마십시오. 유니 코드는 전 세계를 장악했으며 UTF-8은 요즘의 모든 이유 (예 : 모든 것과 호환되어야하는 HTTP 헤더)가없는 한 거의 표준입니다.
실현해야 할 또 하나의 중요한 사항 :이 경우 ISO / IEC 8859-1 대신 Windows-1252 를 참조 iso-8859-1
하는 것입니다 . ISO 8859-1에는 C1 제어 코드가 있고 Windows-1252에는 유용한 가시 문자가있는 0x80–0x9F 범위가 다릅니다.
예를 들어 ISO 8859-1은 0x85를 제어 문자 (유니 코드, U + 0085,``)로, Windows-1252는 가로 줄임표 (Unicode, U + 2026 HORIZONTAL ELLIPSIS, …
)를 갖습니다 .
WHATWG 인코딩 사양 (HTML에서 사용)를 명시 적으로 선언 iso-8859-1
에 대한 레이블로 windows-1252
, 웹 브라우저는 어떤 방식으로 ISO 8859을 지원하지 않습니다 다음 HTML 사양은 인코딩 사양의 모든 인코딩 지원, 더 이상되어야 함을 말한다 .
또한 HTML 숫자 참조는 기본적으로 유니 코드 코드 포인트가 아닌 8 비트 값에 Windows-1252를 사용합니다. https://html.spec.whatwg.org/#numeric-character-reference-end-state 에 따라 …
U + 0085 대신 U + 2026이 생성됩니다.
이 질문을 조사한 이유는 관점에서 볼 때 어떤 방식으로 호환되는지입니다. Latin1 문자 세트 (iso-8859)는 utf8 데이터 저장소에 저장하기 위해 100 % 호환됩니다. 모든 ASCII 및 확장 ASCII 문자는 1 바이트로 저장됩니다.
다른 방법으로 utf8에서 Latin1 문자 세트로 이동하면 작동하지 않을 수 있습니다. 2 바이트 문자 (확장 ASCII 255를 초과하는 문자)가 있으면 Latin1 데이터 저장소에 저장되지 않습니다.