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 바이트 시퀀스가되므로 다르지만 라틴 -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)"은 부모 소위원회까지 유지 보수를 맡겼습니다.
ISO-8859-1은 1980 년대의 레거시 표준입니다. 256 자만 표현할 수 있으므로 서구의 일부 언어에만 적합합니다. 지원되는 많은 언어의 경우에도 일부 문자가 누락되었습니다. 이 인코딩으로 텍스트 파일을 작성하고 일부 한자를 복사 / 붙여 넣기를 시도하면 이상한 결과가 나타납니다. 즉, 사용하지 마십시오. 유니 코드는 전 세계를 장악했으며 UTF-8은 모든 레거시와 호환되어야하는 HTTP 헤더와 같은 레거시 이유가 없다면 요즘 거의 표준입니다.
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'
다른 관점에서, 유니 코드 및 ASCII 인코딩이 모두 바이트 0xc0
를 가지고있어 읽지 못하는 파일은 iso-8859-1에 의해 올바르게 읽히는 것 같습니다. 주의 사항은 물론 파일에 유니 코드 문자가 없어야한다는 것입니다.
이 질문을 조사한 이유는 관점에서 볼 때 어떤 방식으로 호환되는지입니다. Latin1 문자 세트 (iso-8859)는 utf8 데이터 저장소에 저장하기 위해 100 % 호환됩니다. 모든 ASCII 및 확장 ASCII 문자는 1 바이트로 저장됩니다.
다른 방법으로 utf8에서 Latin1 문자 세트로 이동하면 작동하지 않을 수 있습니다. 2 바이트 문자 (확장 ASCII 255를 초과하는 문자)가 있으면 Latin1 데이터 저장소에 저장되지 않습니다.
참고 URL : https://stackoverflow.com/questions/7048745/what-is-the-difference-between-utf-8-and-iso-8859-1
'Programming' 카테고리의 다른 글
Visual Studio에서 디버깅하는 동안 반환하기 전에 반환 값을 찾을 수 있습니까? (0) | 2020.02.27 |
---|---|
Directory.Delete (path, true)를 사용하여 디렉토리를 삭제할 수 없습니다. (0) | 2020.02.27 |
소켓 '/var/mysql/mysql.sock'을 통해 로컬 MySQL 서버에 연결할 수 없습니다 (38). (0) | 2020.02.27 |
__getattr__과 __getattribute__의 차이점 (0) | 2020.02.27 |
크롬에서 기본 인증 세부 정보를 지우는 방법 (0) | 2020.02.27 |