Системы кодирования ascii и unicode. Краткое замечание про кодирование. Кодирование графической информации

Юникод - это очень большой и сложный мир, ведь стандарт позволяет ни много ни мало представлять и работать в компьютере со всеми основными письменностями мира. Некоторые системы письма существуют уже более тысячи лет, причём многие из них развивались почти независимо друг от друга в разных уголках мира. Люди так много всего придумали и оно зачастую настолько непохоже друг на друга, что объединить всё это в единый стандарт было крайне непростой и амбициозной задачей.

Двухфазное полярное цифровое кодирование




Это лучшее решение проблемы синхронизации. У нас есть два типа: Манчестер и Манчестерский дифференциал. Манчестер: Использует переход среднего диапазона для представления информации и синхронизации. Бинарный представляет собой переход от отрицательного к положительному, двоичный нуль с переходом от положительного к отрицательному. Манчестерский дифференциал: использует переход среднего перехода для синхронизации, чтобы представить информацию об отсутствии или существовании перехода в начале интервала. Начальный переход означает двоичный нуль, а его отсутствие соответствует двоичному.


Он основан на использовании трех возможных уровней.

Чтобы по-настоящему разобраться с Юникодом нужно хотя бы поверхностно представлять себе особенности всех письменностей, с которыми позволяет работать стандарт. Но так ли это нужно каждому разработчику? Мы скажем, что нет. Для использования Юникода в большинстве повседневных задач, достаточно владеть разумным минимумом сведений, а дальше углубляться в стандарт по мере необходимости.

Биполярный с чередующимся разворотом бренда

Это самое простое биполярное кодирование. Двоичный нуль представлен нулевым уровнем, а двоичные - переменными положительными и отрицательными уровнями. Он имеет проблемы синхронизации с длинными последовательностями последовательных нулей.


Биполярный с заменой восьми нулей

Каждый раз, когда появляется последовательность из восьми нулей, изменения вводятся в зависимости от полярности предыдущего одного бита.




Имейте в виду, что если полярность предыдущего бит была положительной, нарушение будет иметь положительное значение. Если, наоборот, полярность была отрицательной, то она примет соответствующее отрицательное значение.


Поэтому его можно рассматривать как таблицу переводов символов на бит и наоборот. Его аббревиатуры соответствуют Американскому стандарту для обмена информацией, то есть Американскому стандарту для обмена информацией. Он основан на латинском алфавите, который используется на английском языке.

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

Зачем понадобился Юникод?

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

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

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

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

У такого подхода в целом и однобайтовых кодировок в частности был ряд существенных недостатков:

  1. Можно было одновременно работать лишь с 256 символами, причём первые 128 были зарезервированы под латинские и управляющие символы, а во второй половине кроме символов национального алфавита нужно было найти место для символов псевдографики (╔ ╗).
  2. Шрифты были привязаны к конкретной кодировке.
  3. Каждая кодировка представляла свой набор символов и конвертация из одной в другую была возможна только с частичными потерями, когда отсутствующие символы заменялись на графически похожие.
  4. Перенос файлов между устройствами под управлением разных операционных систем был затруднителен. Нужно было либо иметь программу-конвертер, либо таскать вместе с файлом дополнительные шрифты. Существование Интернета каким мы его знаем было невозможным.
  5. В мире существуют неалфавитные системы письма (иероглифическая письменность), которые в однобайтной кодировке непредставимы в принципе.

Основные принципы Юникода

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

Важно! Одном из центральных принципов в философии Юникода является чёткое разграничение между символами, их представлением в компьютере и их отображением на устройстве вывода.

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

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

Вводится понятие абстрактного юникод-символа, существующего исключительно в виде умозрительной концепции и договорённости между людьми, закреплённой стандартом. Каждому юникод-символу поставлено в соответствие неотрицательное целое число, именуемое его кодовой позицией (code point).

Так, например, юникод-символ U+041F - это заглавная кириллическая буква П. Существует несколько возможностей представления данного символа в памяти компьютера, ровно как и несколько тысяч способов отображения его на экране монитора. Но при этом П, оно и в Африке будет П или U+041F.

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

Это хорошо нам знакомая инкапсуляция или отделение интерфейса от реализации - концепция, отлично зарекомендовавшая себя в программировании.

Получается, что руководствуясь стандартом, любой текст можно закодировать в виде последовательности юникод-символов

Привет U+041F U+0440 U+0438 U+0432 U+0435 U+0442
записать на листочке, упаковать в конверт и переслать в любой конец Земли. Если там знают о существовании Юникода, то текст будет воспринят ими ровно так же, как и нами с вами. У них не будет ни малейших сомнений, что предпоследний символ - это именно кириллическая строчная е (U+0435), а не скажем латинская маленькая e (U+0065). Обратите внимание, что мы ни слова не сказали о байтовом представлении.

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

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

Хотя юникод-символы и называются символами, они далеко не всегда соответствуют символу в традиционно-наивном понимании, например букве, цифре, пунктуационному знаку или иероглифу. (Подробнее смотри под спойлером.)

Примеры различных юникод-символов

Существуют чисто технические юникод-символы, например:

  • U+0000: нулевой символ;
  • U+D800–U+DFFF: младшие и старшие суррогаты для технического представления кодовых позиций в диапазоне от 10000 до 10FFFF (читай: за пределами БМЯП/BMP) в семействе кодировок UTF-16;
  • и т.д.
Существуют пунктуационные маркеры, например U+200F: маркер смены направления письма справа-налево.

Существует целая когорта пробелов различной ширины и назначения (см. отличную хабра-статью: ):

Расширенные методы кодирования

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

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

  • U+0020 (пробел);
  • U+00A0 (неразрывный пробел, в HTML);
  • U+2002 (полукруглая шпация или En Space);
  • U+2003 (круглая шпация или Em Space);
  • и т.д.
Существуют комбинируемые диакритические знаки (сombining diacritical marks) - всевозможные штрихи, точки, тильды и т.д., которые меняют/уточняют значение предыдущего знака и его начертание. Например:
  • U+0300 и U+0301: знаки основного (острого) и второстепенного (слабого) ударений;
  • U+0306: кратка (надстрочная дуга), как в й;
  • U+0303: надстрочная тильда;
  • и т.д.
Существует даже такая экзотика, как языковые тэги (U+E0001, U+E0020–U+E007E, и U+E007F), которые сейчас находятся в подвешенном состоянии. Они задумывались как возможность маркировать определённые участки текста как относящиеся к тому или иному варианту языку (скажем американский и британский вариант английского), что могло влиять на детали отображения текста.

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

Мы можем определить пространство, занимаемое кодированной информацией, без методов сжатия, например, отношение частоты дискретизации и ее разрешения. То есть, чем больше бит используется, тем больше будет результирующий размер файла. Значение разрешения не может быть изменено на завещание, поскольку оно зависит от цифровой системы, с которой оно работает, по этой причине используется сжатие для передачи того же объема информации, который будет содержать высокое разрешение, но с использованием меньшего числа бит, меньший общий размер.

Основная операция методов сжатия основана на поиске серий или повторений данных для устранения всей нежелательной информации. На самом деле процесс, который следует применять в методах сжатия, не так уж и тривиален, он довольно сложный. При понимании процессов сжатия необходимы четкие серии понятий, таких как.

Кодовое пространство Юникода

Кодовое пространство Юникода состоит из 1 114 112 кодовых позиций в диапазоне от 0 до 10FFFF. Из них к девятой версии стандарта значения присвоены лишь 128 237. Часть пространства зарезервирована для частного использования и консорциум Юникода обещает никогда не присваивать значения позициям из этих специальный областей.

Ради удобства всё пространство поделено на 17 плоскостей (сейчас задействовано шесть их них). До недавнего времени было принято говорить, что скорее всего вам придётся столкнуться только с базовой многоязыковой плоскостью (Basic Multilingual Plane, BMP), включающей в себя юникод-символы от U+0000 до U+FFFF. (Забегая немного вперёд: символы из BMP представляются в UTF-16 двумя байтами, а не четырьмя). В 2016 году этот тезис уже вызывает сомнения. Так, например, популярные символы Эмодзи вполне могут встретиться в пользовательском сообщении и нужно уметь их корректно обрабатывать.

Энтропия: разница между общим объемом данных и количеством избыточной информации.

  • Резервирование: все данные, которые являются предсказуемыми или повторяющимися.
  • То есть, это информация, которую нельзя устранить невооруженным глазом.
Мы можем классифицировать информацию, используемую во время процесса, в трех типах.

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

Кодировки

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

Стандарт Юникода включает в себя описание ряда юникод-кодировок, например UTF-8 и UTF-16BE/UTF-16LE, которые позволяют кодировать всё пространство кодовых позиций. Конвертация между этими кодировками может свободно осуществляться без потерь информации.

Сжатие с потерей

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

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

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

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

Без потерь

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

Из юникод-кодировок самой распространённой в Интернете является UTF-8 (она завоевала пальму первенства в 2008 году), главным образом благодаря её экономичности и прозрачной совместимости с семибитной ASCII. Латинские и служебные символы, основные знаки препинания и цифры - т.е. все символы семибитной ASCII - кодируются в UTF-8 одним байтом, тем же, что и в ASCII. Символы многих основных письменностей, не считая некоторых более редких иероглифических знаков, представлены в ней двумя или тремя байтами. Самая большая из определённых стандартом кодовых позиций - 10FFFF - кодируется четырьмя байтами.

Алгоритмы могут быть классифицированы по типам данных, для которых они были разработаны. У нас есть три основных типа: текст, изображение и звук. Сжатие аудио без потери качества. Графическое сжатие без потери качества. Сжатие видео без потери качества.

Методы шифрования

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

Обратите внимание, что UTF-8 - это кодировка с переменной длиной кода. Каждый юникод-символ в ней представляется последовательностью кодовых квантов с минимальной длиной в один квант. Число 8 означает битовую длину кодового кванта (code unit) - 8 бит. Для семейства кодировок UTF-16 размер кодового кванта составляет, соответственно, 16 бит. Для UTF-32 - 32 бита.

Классификация криптографических систем




Асимметричные алгоритмы: используйте разные ключи для шифрования и дешифрования, в этом случае каждый пользователь будет иметь два ключа, также известный как алгоритмы открытого ключа. Симметричные алгоритмы. . Можно подчеркнуть, что в этом классе алгоритмов невозможно получить закрытый ключ из открытого ключа, безопасность основана на тайне частной икры каждого пользователя. В качестве проблем для подчеркивания этого типа алгоритмов можно подчеркнуть, что они являются медленными алгоритмами и подчеркивают, что алгоритмы открытого ключа уязвимы для атак на основе чистого текста, из этой формы закрытый ключ не получается, но если это возможно расшифровывает закодированное сообщение.

Если вы пересылаете по сети HTML-страницу с кириллическим текстом, то UTF-8 может дать весьма ощутимый выигрыш, т.к. вся разметка, а также JavaScript и CSS блоки будут эффективно кодироваться одним байтом. К примеру главная страница Хабра в UTF-8 занимает 139Кб, а в UTF-16 уже 256Кб. Для сравнения, если использовать win-1251 с потерей возможности сохранять некоторые символы, то размер, по сравнению с UTF-8, сократится всего на 11Кб до 128Кб.

Для хранения строковой информации в приложениях часто используются 16-битные юникод-кодировки в силу их простоты, а так же того факта, что символы основных мировых систем письма кодируются одним шестнадцатибитовым квантом. Так, например, Java для внутреннего представления строк успешно применяет UTF-16. Операционная система Windows внутри себя также использует UTF-16.

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

Для корректной интерпретации текста, прочитанного с диска или из сетевого сокета, необходимо сначала определить его кодировку. Это делается либо с использованием метаинформации, предоставленной пользователем, записанной в тексте или рядом с ним, либо определяется эвристически.

В сухом остатке

Информации много и имеет смысл привести краткую выжимку всего, что было написано выше:
  • Юникод постулирует чёткое разграничение между символами, их представлением в компьютере и их отображением на устройстве вывода.
  • Юникод-символы не всегда соответствуют символу в традиционно-наивном понимании, например букве, цифре, пунктуационному знаку или иероглифу.
  • Кодовое пространство Юникода состоит из 1 114 112 кодовых позиций в диапазоне от 0 до 10FFFF.
  • Базовая многоязыковая плоскость включает в себя юникод-символы от U+0000 до U+FFFF, которые кодируются в UTF-16 двумя байтами.
  • Любая юникод-кодировка позволяет закодировать всё пространство кодовых позиций Юникода и конвертация между различными такими кодировками осуществляется без потерь информации.
  • Однобайтные кодировки позволяют закодировать лишь небольшую часть юникод-спектра, но могут оказаться полезными при работе с большим объёмом моноязыковой информации.
  • Кодировки UTF-8 и UTF-16 обладают переменной длиной кода. В UTF-8 каждый юникод-символ может быть закодирован одним, двумя, тремя или четырьмя байтами. В UTF-16 - двумя или четырьмя байтами.
  • Внутренний формат хранения текстовой информации в рамках отдельного приложения может быть произвольным при условии корректной работы со всем пространством кодовых позиций Юникода и отсутствии потерь при трансграничной передаче данных.

Краткое замечание про кодирование

С термином кодирование может произойти некоторая путаница. В рамках Юникода кодирование происходит дважды. Первый раз кодируется набор символов Юникода (character set), в том смысле, что каждому юникод-символу ставится с соответствие кодовая позиция. В рамках этого процесса набор символов Юникода превращается в кодированный набор символов (coded character set). Второй раз последовательность юникод-символов преобразуется в строку байтов и этот процесс также называется кодирование.

В англоязычной терминологии существуют два разных глагола to code и to encode, но даже носители языка зачастую в них путаются. К тому же термин набор символов (character set или charset) используется в качестве синонима к термину кодированный набор символов (coded character set).

Всё это мы говорим к тому, что имеет смысл обращать внимание на контекст и различать ситуации, когда речь идёт о кодовой позиции абстрактного юникод-символа и когда речь идёт о его байтовом представлении.

В заключение

В Юникоде так много различных аспектов, что осветить всё в рамках одной статьи невозможно. Да и ненужно. Приведённой выше информации вполне достаточно, чтобы не путаться в основных принципах и работать с текстом в большинстве повседневных задач (читай: не выходя за рамки BMP). В следующих статьях мы расскажем о нормализации, дадим более полный исторический обзор развития кодировок, побеседуем о проблемах русскоязычной юникод-терминологии, а также сделаем материал о практических аспектах использования UTF-8 и UTF-16.

В системе кодирования ASCII (American Standard Code for Information Interchange - стандартный код информационного обмена США) каждый символ представлен одним байтом, что позволяет закодировать 256 символов.

В ASCII имеется две таблицы кодирования - базовая и расширенная. Базовая таблица закрепляет значения кодов от 0 до 127, а расширенная относится к символам с номерами от 128 до 255. Этого хватит, чтобы выразить различными комбинациями восьми битов все символы английского и русского языков, как строчные, так и прописные, а также знаки препинания, символы основных арифметических действий и обще­принятые специальные символы, которые можно наблюдать на клавиатуре.

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

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

В английской части клавиатуры раньше было много стандартов, а теперь все они заменены на единый код ASCII. Для русской клавиатуры тоже существовало много стандартов: ГОСТ, ГОСТ-альтернативная, ISO (International Standard Organization - Между­народный институт стандартизации), но эти три стандарта фактически уже вымерли, хотя и могут где-то встретиться, в каких-то допотопных компьютерах или в компьютерных сетях.

Основная кодировка символов русского языка, которая используется в компьютерах с операционной системой Windows называется Windows-1251 , она была разработана для алфавитов кириллицы компанией Microsoft. Естественно, что в Windows-1251 закодировано абсолютное большинство компьютерных текстовых данных. Кстати кодировки с другим четырехзначным номером разработаны Microsoft для других распространенных алфавитов: арабского, японского и прочих.

Другая распространенная кодировка носит название КОИ-8 (код обмена информа­цией, восьмизначный) - ее происхождение относится ко временам действия Совета Экономической Взаимопомощи государств Восточной Европы. Сегодня кодировка КОИ-8 имеет распространение в компьютерных сетях на терри­тории России и в российском секторе Интернета. Бывает так, что какой-то текст письма или еще чего-то не читается, это значит, что надо перейти из КОИ-8 в Windows-1251. 10

В 90-х годах крупнейшие производители программного обеспечения: Microsoft, Borland, та же Adobe приняли решение о необходимости разработки другой системы кодировки текста, в которой каждому символу будет отводиться не 1, а 2 байта. Она получила название Unicode , и в ней можно закодировать 65 536 символов этого поля достаточно для размещения в одной таблице национальных алфавитов для всех языков планеты. Большую часть Unicode (около 70%) занимают китайские иероглифы, в Индии имеется 11 различных национальных алфавитов, есть множество экзотических названий, например: письменность канадских аборигенов.

Поскольку на кодирования каждого символа в Unicode отводится не 8, а 16 разрядов, объем текстового файла увеличивается в 2 раза. Когда-то это было препятствием для введения 16-разрядной системы. а сейчас при гигабайтных винчестерах, сотнях мегабайт оперативной памяти, гигагерцных процессорах удвоение объемов текстовых файлов, которые по сравнению, например, с графикой занимают очень немного места, большого значения не имеет.

Кириллица занимает в Unicode места с 768 по 923 (основные знаки) и с 924 по 1023 (расширенная кириллица, различные малораспространенные, национальные буквы). Если программа не адаптирована под кириллицу Unicode, то возможен вариант, когда символы текста распознаются не как кириллица, а как расширенная латиница (коды с 256 по 511). И в этом случае вместо текста на экране появляется бессмысленный набор различных экзотических символов.

Такое возможно, если программа устаревшая, созданная до 1995 года. Или малораспространенная, о русификации которой никто не позаботился. Еще возможен вариант, когда установленная на компьютере ОС Windows не полностью настроена под кириллицу. В этом случае надо сделать соответствующие записи в реестре.