Зачем нам нужны наборы символов UCS и Unicode?
Я думаю, что кодовые точки UCS и Unicode одинаковы, я прав?
В таком случае, зачем нам два стандарта (UCS и Unicode)?
2 ответа
Это не два стандарта. Универсальный набор символов (UCS) не является стандартом, а определен стандартом, а именно ISO 10646. Это не следует путать с кодировками, такими как UCS-2.
Трудно догадаться, имеете ли вы в виду разные кодировки или разные стандарты. Но что касается последнего, Unicode и ISO 10646 изначально были двумя разными усилиями по стандартизации с разными целями и стратегиями. Однако они были согласованы в начале 1990-х годов, чтобы избежать всего беспорядка, вызванного двумя разными стандартами. Они были скоординированы так, чтобы кодовые точки действительно были одинаковыми.
Тем не менее, их держали в стороне, отчасти потому, что Unicode определяется отраслевым консорциумом, который может работать гибко и имеет большой интерес к стандартизации помимо простых назначений кодов. Стандарт Unicode определяет большое количество принципов и правил обработки, а не только символы. ISO 10646 является формальным стандартом, на который можно ссылаться в стандартах и других документах ISO и его членов.
Кодовые точки одинаковы, но есть некоторые различия. Из статьи в Википедии о различиях между Unicode и ISO 10646 (то есть UCS):
Разница между ними заключается в том, что Unicode добавляет правила и спецификации, которые выходят за рамки ISO 10646. ISO 10646 - это простая символьная карта, расширение предыдущих стандартов, таких как ISO 8859. В отличие от этого, Unicode добавляет правила для сопоставления, нормализации форм, и двунаправленный алгоритм для сценариев, таких как иврит и арабский
Возможно, вам будет полезно прочитать Абсолютный минимум, который должен знать каждый разработчик программного обеспечения. Абсолютно, положительно должен знать о Юникоде и наборах символов (никаких оправданий!)
Я думаю, что различия связаны с тем, как кодируются точки кода. UCS-x использует фиксированное количество байтов для кодирования кодовой точки. Например, UCS-2 использует два байта. Однако UCS-2 не может кодировать кодовые точки, которые потребовали бы более 2 байтов. С другой стороны, UTF использует переменное количество байтов для кодирования. Например, UTF-8 использует по крайней мере один байт (для символов ascii), но использует больше байтов, если символ находится вне диапазона ascii.