[utf-8] UTF-8과 ISO-8859-1의 차이점은 무엇입니까?

UTF-8ISO-8859-1 의 차이점은 무엇입니까 ?



답변

UTF-8은 모든 유니 코드 문자를 나타낼 수있는 멀티 바이트 인코딩입니다. ISO 8859-1은 첫 256 개의 유니 코드 문자를 나타낼 수있는 1 바이트 인코딩입니다. 둘 다 ASCII를 정확히 같은 방식으로 인코딩합니다.


답변

Wikipedia는 UTF-8Latin-1 (ISO-8859-1)을 합리적으로 잘 설명합니다 . 이전은 가변 길이 인코딩, 후자의 1 바이트 고정 길이 인코딩입니다. Latin-1은 유니 코드 문자 집합의 첫 256 코드 포인트 만 인코딩하지만 UTF-8은 모든 코드 포인트를 인코딩하는 데 사용할 수 있습니다. 물리적 인코딩 수준에서는 0-127의 코드 포인트 만 동일하게 인코딩됩니다. 코드 포인트 128-255는 UTF-8을 사용하는 2 바이트 시퀀스가되므로 다르지만 Latin-1을 사용하는 단일 바이트입니다.


답변

UTF

UTF 는 최대 2 ^ 31 [약 20 억] 문자를 나타낼 수있는 유니 코드 코드 포인트를 나타낼 수있는 멀티 바이트 인코딩 체계의 제품군입니다 . UTF-8 은 1 ~ 4 바이트를 사용하여 첫 2 ^ 21 [약 2 백만] 코드 포인트를 나타내는 유연한 인코딩 시스템입니다.

간단히 말해 : 7 비트 안전 ASCII라고하는 코드 포인트 / 소수점 표현이 127 미만인 문자는 대부분의 다른 1 바이트 인코딩과 동일한 1 바이트 시퀀스로 표시됩니다. 코드 포인트가 127 이상인 모든 문자는 2 바이트 이상의 시퀀스로 표시되며 여기에서 가장 잘 설명 된 인코딩이 있습니다 .

ISO-8859

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 헤더)가없는 한 거의 표준입니다.


답변

다른 관점에서, 유니 코드 및 ASCII 인코딩이 모두 바이트 0xc0를 가지고있어 읽지 못하는 파일은 iso-8859-1에 의해 올바르게 읽히는 것 같습니다. 주의 사항은 물론 파일에 유니 코드 문자가 없어야한다는 것입니다.


답변

실현해야 할 또 하나의 중요한 사항 :이 경우 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이 생성됩니다.