В чем разница между UTF-8 и ISO-8859-1? - PullRequest
356 голосов
/ 13 августа 2011

В чем разница между UTF-8 и ISO-8859-1 ?

Ответы [ 7 ]

296 голосов
/ 13 августа 2011

UTF-8 - это многобайтовая кодировка, которая может представлять любой символ Unicode.ISO 8859-1 - это однобайтовая кодировка, которая может представлять первые 256 символов Unicode.Оба кодируют ASCII точно одинаково.

123 голосов
/ 13 августа 2011

Википедия достаточно хорошо объясняет оба: UTF-8 против Latin-1 (ISO-8859-1).Первоначально кодирование переменной длины, последнее однобайтовое кодирование фиксированной длины.Latin-1 кодирует только первые 256 кодовых точек набора символов Unicode, тогда как UTF-8 может использоваться для кодирования всех кодовых точек.На физическом уровне кодирования только кодовые точки 0 - 127 кодируются одинаково;кодовые точки 128 - 255 отличаются, став 2-байтовой последовательностью с UTF-8, тогда как они являются одиночными байтами с Latin-1.

66 голосов
/ 23 августа 2016

UTF

UTF - это семейство многобайтовых схем кодирования, которые могут представлять Unicode кодовые точки, которые могут представлять собой до 2 ^ 31 [приблизительно 2 миллиардов] символов. UTF-8 - это гибкая система кодирования, которая использует от 1 до 4 байтов для представления первых 2 ^ 21 [примерно 2 миллионов] кодовых точек.

Короче говоря: любой символ с кодовой точкой / порядковым представлением ниже 127, то есть 7-битный безопасный ASCII, представлен той же 1-байтовой последовательностью, что и большинство других однобайтовых кодировок. Любой символ с кодовой точкой выше 127 представлен последовательностью из двух или более байтов, причем особенности кодирования лучше всего объяснить здесь .

ISO-8859

ISO-8859 - это семейство однобайтовых схем кодирования, используемых для представления алфавитов, которые могут быть представлены в диапазоне от 127 до 255. Эти различные алфавиты определены как «части» в формате ISO -8859- n , наиболее знакомым из них, вероятно, является ISO-8859-1 aka 'Latin-1'. Как и в UTF-8, 7-битный безопасный ASCII остается неизменным независимо от используемого семейства кодирования.

Недостатком этой схемы кодирования является ее неспособность приспособить языки, содержащие более 128 символов, или безопасно отображать более одного семейства символов одновременно. Кроме того, кодировки ISO-8859 потеряли популярность с ростом UTF. Рабочая группа ИСО, ответственная за ее расформирование в 2004 году, оставила техническое обслуживание своему родительскому подкомитету.

16 голосов
/ 03 июня 2016

ISO-8859-1 - это устаревшие стандарты 1980-х годов. Он может содержать только 256 символов, поэтому подходит только для некоторых языков западного мира. Даже для многих поддерживаемых языков некоторые символы отсутствуют. Если вы создадите текстовый файл в этой кодировке и попытаетесь скопировать / вставить некоторые китайские символы, вы увидите странные результаты. Другими словами, не используйте его. Unicode захватил мир, и UTF-8 в наши дни в значительной степени является стандартом, если только у вас нет каких-либо традиционных причин (таких как заголовки HTTP, которые должны быть совместимы со всем).

11 голосов
/ 29 октября 2018
  • 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'
1 голос
/ 15 апреля 2018

С другой стороны, файлы, которые как в кодировке Unicode, так и в кодировке ascii не читаются, так как содержат байт 0xc0, похоже, правильно считываются iso-8859-1. Предостережение заключается в том, что в файле, конечно, не должно быть символов юникода.

0 голосов
/ 02 сентября 2016

Моя причина для исследования этого вопроса была с точки зрения, в какой степени они совместимы.Кодировка Latin1 (iso-8859) на 100% совместима для хранения в хранилище данных utf8.Все символы ascii и extended-ascii будут храниться как однобайтовые.

Иначе, от utf8 к Latin1 кодировка может или не может работать.Если есть какие-либо 2-байтовые символы (символы за пределами extended-ascii 255), они не будут храниться в хранилище данных Latin1.

...