Почему английские символы требуют меньше байтов, чтобы представлять, чем другие алфавиты?

Когда я поставил 'Это' в текстовом файле, он делает это 2 байта, но когда я положил, пусть'ы сказать, 'ա', который представляет собой письмо армянского алфавита, это делает это 3 байта.

В чем разница между алфавитами для компьютера? Почему английский занимают меньше места?

Комментарии к вопросу (7)
Решение

Одна из первых схем кодирования, которые будут разработаны для использования в обычных компьютерах-это в ASCII (американский стандартный код для обмена информацией) стандарт. Она была разработана в 1960's в США.

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

В 1960's был также момент, где компьютеры не'т иметь объем памяти или дискового пространства, который мы имеем сейчас. ASCII был разработан, чтобы быть стандартное представление функциональной алфавит во всех американских компьютерах. В свое время решение сделать каждого символа ASCII должен быть 8 бит (1 байт) давно был сделан из-за технических деталей времени (статья в Википедии упоминает тот факт, что перфорированные ленты состоялась 8 бит на должность в то время). На самом деле, исходную схему в формате ASCII, могут быть переданы, используя 7 бит, восемь могут быть использованы для проверки четности. Последующие события расширил исходную схему в формате ASCII включает несколько ударением, математических и терминальных символов.

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

Юникод пришел как решение о существовании разных терминалах, путем объединения всех возможных понятные символы в единый абстрактный набор символов.

Кодировке UTF-8 является одним из способов кодирования набора символов Unicode. Он является переменной ширины кодирования (например, различные символы могут иметь разный размер) и он был разработан для обратной совместимости с бывшей схему в формате ASCII. Как таковой, набор символов ASCII останется один байт большой, в то время как любые другие символы являются два или более байтов большой. В UTF-16-это еще один способ кодирования набор символов Unicode. По сравнению с UTF-8 символы кодируются как набор из одного или двух 16-разрядных кодовых единиц.

Как заявил в комментарии, 'Это' символ занимает один байт в то время как 'ա' занимает два байта, обозначающие кодировке UTF-8. Дополнительный байт на ваш вопрос был в связи с наличием символ новой строки в конце (который ОП узнал об).

Комментарии (20)

1 байт-это 8 бит, и, таким образом, может представлять до 256 (2^8) различных значений.

Для языков, которые требуют больше возможностей, чем в этом, просто 1 к 1 сопоставление может'т быть сохранены, так что больше данных требуется, чтобы сохранить персонажа.

Обратите внимание, что как правило, большинство кодировок использовать первые 7 бит (128 значений) для в ASCII символов. Это оставляет 8-й бит или более 128 значений дополнительные символы . . . добавить в символы с диакритическими знаками, азиатские языки, кириллица, и т. д., И вы можете легко увидеть, почему 1 байт недостаточно для учета всех персонажей.

Комментарии (1)

В UTF-8, символы ASCII используется один байт, остальные символы использовать два, три или четыре байта.

Комментарии (7)

Количество байтов, необходимое для персонажа (вопрос, видимо, о) зависит от кодировки символов. Если вы используете кодировки ArmSCII, каждый армянского письма занимает всего один байт. Это не хороший выбор в эти дни, хотя.

В кодировке UTF-8 переводить на Юникод символов нужно разное количество байт. В нем, “а” занимает всего один байт (идея о двух байтов это какая-то путаница), “á” занимает два байта, и армянское письмо Айб “ա” занимает два байта тоже. Три байта должна быть какая-то путаница. В отличие от, например, Бенгальский письмо “অ” занимает три байта в UTF-8.

Просто фон, что UTF-8 был разработан, чтобы быть очень эффективным для символов ASCII, достаточно эффективные для написания систем в Европе и окрестностях, а все остальное менее эффективно. Это означает, что основные латинские буквы (которая является то, что английский текст состоит в основном из), только один байт нужно для персонажа; для греческий, армянский, и несколько других, необходимых двух байтов; все остальное нужно больше.

UTF-8 не имеет (как указывалось в комментарии) также полезным свойством, что данные в формате ASCII (когда представлены в виде 8-разрядных блоков, который был чуть ли не единственный способ на долгое время) - это тривиально кодировке UTF-8 тоже.

Комментарии (3)

Коды символов в 1960-х (и после) были машины-конкретными. В 1980-е годы я кратко использовал декабря 2020 автомат, который имел 36 разрядных слов, и 5, 6 и 8 (IIRC) бит в кодировках. До этого я использовал серии IBM 370 с кодировка. ASCII с 7 битами навел порядок, но бардак с IBM ПК с "кодировка" и через все 8 битов для представления дополнительных символов, как всякие окне рисования, чтобы нарисовать примитивную меню, а позже в ASCII расширений, таких как Latin-1 (8-битные кодировки, причем первые 7 бит, как ASCII и другая половина для на "национальные символы" и какñ, Ç, или другие. Наверное, самым популярным был латинский-1, скроенные на английский и большинство европейских языков, использующих латинский алфавит (и акцентов и вариантов).

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

Сегодня мы используем Юникод, который cupled для эффективной кодировки, например UTF-8, что пользу английских символов (удивительно, кодировки для букв английского алфавита просто так случиться, чтобы соответствовать в ASCII), что делает не-английские символы использовать больше кодировок.

Комментарии (0)

Если вас интересует как хранятся символы, вы можете перейти к www.unicode.org и посмотреть вокруг. В верхней части главной страницы есть ссылка на "диаграммы кода", что показывает все коды символов, которые доступны в кодировке Unicode.

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

Вместо этого, Юникод обычно хранится в "кодировку UTF-8" и кодировки, в которой используется меньшее количество байт для некоторых символов и больше для других. Первые 128 значений код хранится в одном байте, до первой 2048 значений кода хранятся в двух байт до 65536 хранятся в три байта, а остальное взять четыре байта. Это было устроено так, что значения кодов, которые используются чаще занимают меньше места. А-Z, а-z, 0-9 и !@$%^&пож;*()-[}{};'\:&и"|,./<>? и то, что я забыл взять один байт; почти все на английском, 98% немецких и французских (только предполагаю), может быть сохранен в один байт на символ, а это символы, которые используются наиболее. Кириллица, греческий, иврит, арабский и некоторые другие используют два байта на символ. Индийских языках, большинство из китайский, японский, корейский, тайский, тонн математические символы, может быть записан в три байта на символ. Редкие вещи (если вы хотите написать текст в линейный или линейный Б, эмодзи) взять четыре байта.

Другой кодировка UTF-16. Все это длится 1, 2 или 3 байта в UTF-8 занимает два байта в UTF-16. Что'ы преимущество, если у вас китайский или японский текст с очень немногими латинскими символами между ними.

О причинах кодировке UTF-8 дизайн: он имеет ряд преимуществ над другими конструкциями. Они являются:

Совместимость с US-ASCII символы

Разумная компактность

Собственн-синхронизации: это означает, что если вам дают часть последовательности байтов, которые являются символами в кодировке UTF-8, вы можете узнать, где персонаж начинает. В некоторых кодировках, как Ху и ух может быть действительным кодировок символов, так что если вам дают часть последовательности ... xyxyxyxyxyxy ... вы не знаете, какие символы у вас.

Правильность сортировки: если сортировать строки, содержащие в кодировке UTF-8 символов, их значения байта, то они автоматически правильно сортируются в соответствии с их значениями в Юникоде.

Совместим с однобайтовый код: большинство кода, который принимает один байт значения автоматически работает корректно с UTF-8 закодированных символов.

Плюс каким-то причинам забыл.

Комментарии (0)

Windows 8.1 с нами/английский Файл с один 'Это' сохраненные в блокноте.

  • Сохранить как ANSI 1 байт
  • Сохранить как Юникод 4 байта
  • Сохранить как UTF-8 4 байта

Файл с один 'ա' сохраненные в блокноте

  • Сохранить как ANSI невозможно
  • Сохранить как Юникод 4 байта
  • Сохранить как UTF-8 5 байт

Один 'Это' кодируется одним байтом, в кодировке ANSI, в кодировке Unicode каждый символ обычно 2 байта есть также 2 байта BOM(отметка порядка байтов) в начало файла. Кодировка UTF-8 имеет 3 байта BOM и одного байта.

Для 'ա' что персонаж не существует в набор символов ANSI и может'т быть сохранены на моей машине. Файл в Юникоде же, как и прежде, и файл в UTF-8-1 байт больше, как символ занимает 2 байта.

Если ваша машина из другого региона вы можете иметь другие установленные OEM-код страницы, которая имеет разные глифы для 255 символов ASCII в диапазоне. Как @файла ntoskrnl упомянул OEM-кодировку для моей машины будет Windows-1252, которая используется по умолчанию для английского языка.

Комментарии (2)