Как кодировка символов связана со шрифтами?

11

Я имею в виду, должен ли шрифт поддерживать каждую кодировку символов? Или кодировка символов должна поддерживать каждый шрифт?

Что означают шрифты Unicode? они шрифты, которые поддерживают только Unicode, и они не поддерживают, скажем, Windows-1252?

Доктор Стрейнджлав
источник

Ответы:

7

Чтобы начать с основ, все основано на US-ASCII, который представляет собой 7-битный код со 128 кодовыми точками в наборе, пронумерованные шестнадцатеричные от 00 до 7F или десятичные 0-127. Это сопоставлено с управляющими кодами, английскими буквенно-цифровыми и основными знаками препинания

Добавление 1 бита к этому для 8-битного кода (байта) дает нам еще 128 кодовых точек или расширенный ASCII.

Наборы символов / кодовые страницы требовались на ранних этапах, чтобы изменить то, как кодовые точки в верхних 128 битах отображаются на символы, чтобы охватить алфавит для конкретного языка, который вы хотите представить. Это работает достаточно хорошо для большинства западноевропейских языков. ISO 8859-1 / Latin-1 является примером такого набора символов. Другим является Windows-1252, который имеет изменения по сравнению с ISO 8859-1, чтобы помочь ему охватывать больше или разных символов.

Языки с более сложными наборами символов, такими как китайский, японский и корейский, превосходят возможности набора из 256 кодовых точек и используют двухбайтовый код для их представления.

Unicode UTF-8 - это схема кодирования многобайтовых символов (1-4 байта) с обратной совместимостью с ISO 8859-1 / Latin-1, которая является его первыми 128 символами. В нем есть место для более чем 1 миллиона кодовых точек, что означает, что каждая кодовая точка может фактически представлять символ, в отличие от обхода, сделанного с помощью Extended ASCII, что означает, что кодовая точка отображается на другой символ в зависимости от набора символов / кодовой страницы / кодирование.

Шрифты - это глифы, которые отображаются на кодовые точки и визуально представляют символы. Содержимое шрифта зависит от того, на каких языках оно изначально предназначалось. Вы можете использовать карту символов, чтобы увидеть, какие глифы содержатся в шрифте.

Unicode-шрифты не обязательно охватывают все кодовые точки, вам нужно увидеть, где они были предназначены для использования. Например, в Windows 7 запустите карту персонажей и просмотрите символы в Calibri, а затем сравните их с Ebrima, Meiryo и Raavi. Обратите внимание, что они сильно различаются, потому что каждый из них адаптирован к разным географическим регионам.

Что касается шрифтов Unicode и набора символов Windows-1252, Windows использует таблицу сопоставления для перевода Windows-1252 в Unicode, где он не соответствует ISO 8859-1 для сценария «Наилучшее соответствие», где некоторые символы в символе Windows-1252 набор может не отображаться.

Fiasco Labs
источник
5

Набор символов

Набор символов - это набор символов, каждому из которых присвоен номер.

Хорошо известный набор символов - ASCII. Это набор из 128 символов, пронумерованных от 0 до 127. Все эти числа могут быть выражены в 7 битах (следовательно, это 7-битный набор символов)

Большинство, но не все другие наборы символов включают набор ASCII с той же нумерацией. Примеры наборов символов, которые не похожи на ASCII, включают EBCDIC. Были также европейские варианты ASCII, которые имели разные символы в определенных позициях (например, чтобы включить £)

Кодировки

Для больших наборов символов, таких как Unicode, с более чем миллионом символов, потребуется три или четыре байта на символ, чтобы вместить большой диапазон номеров, которые были назначены символам. Вместо этого они используют систему, которая позволяет «кодировать» это число как один, два, три или более байтов. В схеме кодирования UTF-8 символы, совпадающие с символами ASCII, кодируются отдельными байтами с тем же байтовым значением, что и в ASCII.

Вышеуказанные кодировки используются при хранении текста в файлах.

Гарнитуры

Гарнитура - это особый дизайн визуального представления (то есть формы) для набора символов. Формы называются глифами. Гарнитура может иметь несколько глифов для одного символа (рассмотрим «а»). Он может содержать глифы для пар символов, называемых лигатурами (например, «ff» или «fi»). Поэтому в гарнитуре набор символов, для которого был разработан глиф, часто отличается от набора символов в известных наборах символов (гарнитуры обычно не включают глифы для управляющих символов ASCII).

шрифты

В контексте компьютеров, шрифт означает файл, содержащий глифы, упорядоченные по некоторой схеме нумерации (которая часто не совпадает с нумерацией в любом известном наборе символов). Исторически существовали растровые шрифты, которые представляли определенный размер (в пикселях или точках) гарнитуры. В настоящее время большинство шрифтов используют математические кривые для описания глифов и поэтому могут масштабироваться для представления любого размера шрифта.

Собираем все вместе

Когда вы отображаете текстовый файл, компьютеру нужно сообщить (или угадать) кодировку, используемую в файле. Затем он будет использовать другую нумерацию (например, 16-битный вариант Unicode) для представления текста в памяти, затем он будет использовать информацию в файле шрифта для сопоставления внутреннего представления с нумерацией (кодировкой), используемой в файле шрифта.

RedGrittyBrick
источник
3

Должен ли шрифт поддерживать каждую кодировку символов?

Я не знаю, есть ли вообще кто-нибудь.
Это означало бы, что у них будет каждый мыслимый персонаж "в них". Наиболее распространенные шрифты, которые мы использовали для поддержки кодировок западных культур (латинский).

Или кодировка символов должна поддерживать каждый шрифт?

Кодировка символов, в некотором смысле, не «поддерживает» что-либо, так что это действительно неправильный взгляд.

Что означают шрифты Unicode? Являются ли они шрифтами, которые поддерживают только Unicode, и они не поддерживают, скажем, Windows-1252?

Юникод является стандартом (или, по крайней мере, пытается им быть), который поддерживает большое количество символов, поэтому многие кодировки являются его подмножеством. Windows 1252 или CP1252 - это кодировка, в которой есть латинские символы плюс некоторые символы центральной Европы. Большинство из них также "покрыты" юникодом. Почти все юникодные шрифты также охватывают CP1252.

ладья
источник
1
Unicode однозначно является стандартом, пронумерованным ISO 10646.
MSalters