Почему меняется размер закодированного сообщения
Перейти к содержимому

Почему меняется размер закодированного сообщения

  • автор:

Выбор кодировки текста при открытии и сохранении файлов

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

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

В этой статье

  • Общие сведения о кодировке текста
  • Выбор кодировки при открытии файла
  • Выбор кодировки при сохранении файла
  • Поиск кодировок, доступных в Word

Общие сведения о кодировке текста

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

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

Различные кодировки для разных алфавитов

Сведения о кодировке, сохраняемые с текстовым файлом, используются компьютером для вывода текста на экран. Например, в кодировке «Кириллица (Windows)» знаку «Й» соответствует числовое значение 201. Когда вы открываете файл, содержащий этот знак, на компьютере, на котором используется кодировка «Кириллица (Windows)», компьютер считывает число 201 и выводит на экран знак «Й».

Однако если тот же файл открыть на компьютере, на котором по умолчанию используется другая кодировка, на экран будет выведен знак, соответствующий числу 201 в этой кодировке. Например, если на компьютере используется кодировка «Западноевропейская (Windows)», знак «Й» из исходного текстового файла на основе кириллицы будет отображен как «É», поскольку именно этому знаку соответствует число 201 в данной кодировке.

Юникод: единая кодировка для разных алфавитов

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

Так как Word работает на базе Юникода, все файлы в нем автоматически сохраняются в этой кодировке. Файлы в Юникоде можно открывать на любом компьютере с операционной системой на английском языке независимо от языка текста. Кроме того, на таком компьютере можно сохранять в Юникоде файлы, содержащие знаки, которых нет в западноевропейских алфавитах (например, греческие, кириллические, арабские или японские).

Выбор кодировки при открытии файла

Если в открытом файле текст искажен или выводится в виде вопросительных знаков либо квадратиков, возможно, Word неправильно определил кодировку. Вы можете указать кодировку, которую следует использовать для отображения (декодирования) текста.

  1. Откройте вкладку Файл.
  2. Нажмите кнопку Параметры.
  3. Нажмите кнопку Дополнительно.
  4. Перейдите к разделу Общие и установите флажокПодтверждать преобразование формата файла при открытии.

Примечание: Если установлен этот флажок, Word отображает диалоговое окно Преобразование файла при каждом открытии файла в формате, отличном от формата Word (то есть файла, который не имеет расширения DOC, DOT, DOCX, DOCM, DOTX или DOTM). Если вы часто работаете с такими файлами, но вам обычно не требуется выбирать кодировку, не забудьте отключить этот параметр, чтобы это диалоговое окно не выводилось.

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

Чтобы установить дополнительные шрифты, сделайте следующее:

  1. Нажмите кнопку Пуск и выберите пункт Панель управления.
  2. Выполните одно из указанных ниже действий. В Windows 7
    1. На панели управления выберите раздел Удаление программы.
    2. В списке программ щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.

    В Windows Vista

    1. На панели управления выберите раздел Удаление программы.
    2. В списке программ щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.

    В Windows XP

    1. На панели управления щелкните элемент Установка и удаление программ.
    2. В списке Установленные программы щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.

    Совет: При открытии текстового файла в той или иной кодировке в Word используются шрифты, определенные в диалоговом окне Параметры веб-документа. (Чтобы вызвать диалоговое окно Параметры веб-документа, нажмите кнопку Microsoft Office, затем щелкните Параметры Word и выберите категорию Дополнительно. В разделе Общие нажмите кнопку Параметры веб-документа.) С помощью параметров на вкладке Шрифты диалогового окна Параметры веб-документа можно настроить шрифт для каждой кодировки.

    Выбор кодировки при сохранении файла

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

    Если документ планируется открывать в программе, которая не поддерживает Юникод, вы можете выбрать нужную кодировку. Например, в операционной системе на английском языке можно создать документ на китайском (традиционное письмо) с использованием Юникода. Однако если такой документ будет открываться в программе, которая поддерживает китайский язык, но не поддерживает Юникод, файл можно сохранить в кодировке «Китайская традиционная (Big5)». В результате текст будет отображаться правильно при открытии документа в программе, поддерживающей китайский язык (традиционное письмо).

    Примечание: Так как Юникод — это наиболее полный стандарт, при сохранении текста в других кодировках некоторые знаки могут не отображаться. Предположим, например, что документ в Юникоде содержит текст на иврите и языке с кириллицей. Если сохранить файл в кодировке «Кириллица (Windows)», текст на иврите не отобразится, а если сохранить его в кодировке «Иврит (Windows)», то не будет отображаться кириллический текст.

    Если выбрать стандарт кодировки, который не поддерживает некоторые символы в файле, Word пометит их красным. Вы можете просмотреть текст в выбранной кодировке перед сохранением файла.

    При сохранении файла в виде кодированного текста из него удаляется текст, для которого выбран шрифт Symbol, а также коды полей.

    Выбор кодировки

    1. Откройте вкладку Файл.
    2. Выберите пункт Сохранить как. Чтобы сохранить файл в другой папке, найдите и откройте ее.
    3. В поле Имя файла введите имя нового файла.
    4. В поле Тип файла выберите Обычный текст.
    5. Нажмите кнопку Сохранить.
    6. Если появится диалоговое окно Microsoft Office Word — проверка совместимости, нажмите кнопку Продолжить.
    7. В диалоговом окне Преобразование файла выберите подходящую кодировку.
    8. Чтобы использовать стандартную кодировку, выберите параметр Windows (по умолчанию).
    9. Чтобы использовать кодировку MS-DOS, выберите параметр MS-DOS.
    10. Чтобы задать другую кодировку, установите переключатель Другая и выберите нужный пункт в списке. В области Образец можно просмотреть текст и проверить, правильно ли он отображается в выбранной кодировке.

    Примечание: Чтобы увеличить область отображения документа, можно изменить размер диалогового окна Преобразование файла.

    Поиск кодировок, доступных в Word

    Word распознает несколько кодировок и поддерживает кодировки, которые входят в состав системного программного обеспечения.

    Ниже приведен список письменностей и связанных с ними кодировок (кодовых страниц).

    Система письменности

    Используемый шрифт

    Юникод (UCS-2 с прямым и обратным порядком байтов, UTF-8, UTF-7)

    Стандартный шрифт для стиля «Обычный» локализованной версии Word

    Windows 1256, ASMO 708

    Китайская (упрощенное письмо)

    GB2312, GBK, EUC-CN, ISO-2022-CN, HZ

    Китайская (традиционное письмо)

    BIG5, EUC-TW, ISO-2022-TW

    Windows 1251, KOI8-R, KOI8-RU, ISO8859-5, DOS 866

    Английская, западноевропейская и другие, основанные на латинице

    Windows 1250, 1252-1254, 1257, ISO8859-x

    Почему base64 увеличивает длину строки?

    есть хекс 6285692541a3d247155c75df 24 символа
    после base64url NjI4NTY5MjU0MWEzZDI0NzE1NWM3NWRm 32 символа
    Почему при переходе из 16-значной системы в 64-значною длина строки увеличилась, а не уменьшилась?

    • Вопрос задан более года назад
    • 679 просмотров

    Комментировать
    Решения вопроса 1

    2ord

    Из Википедии:

    Каждые 3 исходных байта кодируются 4-мя символами (увеличение на ¹⁄₃).

    Ответ написан более года назад
    Нравится 3 5 комментариев
    Eitewi @Eitewi Автор вопроса
    Сущевствует ли кодировка (аналог base64url) уменьшающий размер строки?

    2ord

    А зачем это понадобилось? Кстати, base64 — это не кодирование, а шифрование.

    AgentSmith

    Николай Савельев @AgentSmith

    Кстати, base64 — это не кодирование, а шифрование.

    Это НЕ шифрование

    Base64 — стандарт кодирования двоичных данных

    Михаил @Akela_wolf

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

    2ord

    Николай Савельев,
    Я именно это и хотел написать, но торопясь, перепутал порядок. Увы.
    Ответы на вопрос 2

    SagePtr

    Еда — это святое

    Потому что вы закодировали текстовое представление этой последовательности, которое занимает в 2 раза больше байт, чем сама исходная последовательность.
    Если закодировать саму 12-байтную последовательность в base64, получится YoVpJUGj0kcVXHXf (16 символов).

    Ответ написан более года назад
    Комментировать
    Нравится 3 Комментировать
    Разработчик на С++, экс-олимпиадник.

    Почему при переходе из 16-значной системы в 64-значною длинна строки увеличилась, а не уменьшилась?

    Потому что на самом деле у вас переход из 256-ричной системы в 64-ричную. Base64 позволяет кодировать любые строки, а не только из 16 символов 0-9,a-f.

    Если вы хотите вашу строку интерпретировать как 16 запись, то вам надо ее сначала из hex записи раскодировать. Гуглите HexToBase64, hexToAscii или HexDecode. Какая нибудь такая функция наверняка есть в библиотеке. Или ее можно самостоятельно написать, превращая по 2 символа в 1.

    Да, только это все возможно только если у вас длина исходной строки четная.

    Почему меняется размер закодированного сообщения

    Base64 — стандарт кодирования байтов при помощи только 64 символов (A-Z, a-z и 0-9 (62 знака) и 2 дополнительных символа, зависящих от системы реализации).

    Одним байтом можно закодировать 256 значений (2 8 бит), в то время как Base64 только 64 (2 6 бит).

    Из этого следует соотношение 2 8 + 2 8 + 2 8 = 2 6 + 2 6 + 2 6 + 2 6 , т.е. каждые 3 исходных байта кодируются в 4 байта.

    Можно вывести формулу:

    [Кол-во байт в Base64] = ([Исходное кол-во байт] / 3) * 4 или [Кол-во байт в Base64] = 4 * [Исходное кол-во байт] / 3 или [Кол-во байт в Base64] = 4/3 * [Исходное кол-во байт]

    Например: Файл размером 1500 байт в Base64 будет занимать 2000 байт (т.е. на 1/3 больше).

    Рассмотрим обратную задачу: есть Base64-строка и нужно понять сколько это будет байтов при раскодировке. Из формул выше можно выразить исходное кол-во байт:

    [Исходное кол-во байт] = 3/4 * [Кол-во байт в Base64] или [Исходное кол-во байт] = 0.75 * [Кол-во байт в Base64]

    Например: Base64-строка размером 2000 байт, декодируется в 1500 байт (т.е. на 1/4 меньше);

    Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юникод (UTF 8, 16, 32) — как исправить проблему с кракозябрами

    Здравствуйте, уважаемые читатели блога KtoNaNovenkogo.ru. Сегодня мы поговорим с вами про то, откуда берутся кракозябры на сайте и в программах, какие кодировки текста существуют и какие из них следует использовать. Подробно рассмотрим историю их развития, начиная от базовой ASCII, а также ее расширенных версий CP866, KOI8-R, Windows 1251 и заканчивая современными кодировками консорциума Юникод UTF 16 и 8.

    Кодировка русского языка UTF 8 самая часто встречаемая

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

    ASCII — базовая кодировка текста для латиницы

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

    Но все же отправной точкой для развития современных кодировок текстов стоит считать знаменитую ASCII (American Standard Code for Information Interchange, которая по-русски обычно произносится как «аски»). Она описывает первые 128 символов из наиболее часто используемых англоязычными пользователями — латинские буквы, арабские цифры и знаки препинания.

    Еще в эти 128 знаков, описанных в ASCII, попадали некоторые служебные символы навроде скобок, решеток, звездочек и т.п. Собственно, вы сами можете увидеть их:

    Пример кодировки ASCII

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

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

    Тут, наверное, стоит еще немного сказать про системы счисления, которые используются при описании. Во-первых, как вы все знаете, компьютер работает только с числами в двоичной системе, а именно с нулями и единицами («булева алгебра», если кто проходил в институте или в школе). Один байт состоит из восьми бит, каждый из которых представляет из себя двойку в степени, начиная с нулевой, и до двойки в седьмой:

    Преобразование двоичных чисел в шестнадцатиричные при кодировании

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

    В нашем примере это получается 1 (2 в степени ноль) плюс 8 (два в степени 3), плюс 32 (двойка в пятой степени), плюс 64 (в шестой), плюс 128 (в седьмой). Итого получает 233 в десятичной системе счисления. Как видите, все очень просто.

    Но если вы присмотритесь к таблице с символами ASCII, то увидите, что они представлены в шестнадцатеричной кодировке. Например, «звездочка» соответствует в Аски шестнадцатеричному числу 2A. Наверное, вам известно, что в шестнадцатеричной системе счисления используются кроме арабских цифр еще и латинские буквы от A (означает десять) до F (означает пятнадцать).

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

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

    Расширенные версии Аски — кодировки CP866 и KOI8-R с псевдографикой

    Итак, мы с вами начали говорить про ASCII, которая являлась как бы отправной точкой для развития всех современных кодировок (Windows 1251, юникод, UTF 8).

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

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

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

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

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

    Например, изначально появилась CP866, в которой была возможность использовать символы русского алфавита и она являлась расширенной версией ASCII.

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

    Русская кодировка CP866

    Видите, в правом столбце цифры начинаются с 8, т.к. числа с 0 до 7 относятся к базовой части ASCII (см. первый скриншот). Т.о. русская буква «М» в CP866 будет иметь код 9С (она находится на пересечении соответствующих строки с 9 и столбца с цифрой С в шестнадцатеричной системе счисления), который можно записать в одном байте информации, и при наличии подходящего шрифта с русскими символами эта буква без проблем отобразится в тексте.

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

    CP866 распространяла компания IBM, но кроме этого для символов русского языка были разработаны еще ряд кодировок, например, к этому же типу (расширенных ASCII) можно отнести KOI8-R:

    Пример кодировки русского языка KOI8-R

    Принцип ее работы остался тот же самый, что и у описанной чуть ранее CP866 — каждый символ текста кодируется одним единственным байтом. На скриншоте показана вторая половина таблицы KOI8-R, т.к. первая половина полностью соответствует базовой Аски, которая показана на первом скриншоте в этой статье.

    Среди особенностей кодировки KOI8-R можно отметить то, что русские буквы в ее таблице идут не в алфавитном порядке, как это, например, сделали в CP866.

    Если посмотрите на самый первый скриншот (базовой части, которая входит во все расширенные кодировки), то заметите, что в KOI8-R русские буквы расположены в тех же ячейках таблицы, что и созвучные им буквы латинского алфавита из первой части таблицы. Это было сделано для удобства перехода с русских символов на латинские путем отбрасывания всего одного бита (два в седьмой степени или 128).

    Windows 1251 — современная версия ASCII и почему вылезают кракозябры

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

    Они относились к так называемым ANSI кодировкам, которые были разработаны американским институтом стандартизации. В просторечии еще использовалось название кириллица для варианта с поддержкой русского языка. Примером такой может служить Windows 1251.

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

    Windows 1251

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

    Очень часто они вылезали при отправке и получении сообщений по электронной почте, что повлекло за собой создание очень сложных перекодировочных таблиц, которые, собственно, решить эту проблему в корне не смогли, и зачастую пользователи для переписки использовали транслит латинских букв, чтобы избежать пресловутых кракозябров при использовании русских кодировок подобных CP866, KOI8-R или Windows 1251.

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

    Допустим, если символы, закодированные с помощью CP866, попробовать отобразить, используя кодовую таблицу Windows 1251, то эти самые кракозябры (бессмысленный набор знаков) и вылезут, полностью заменив собой текст сообщения.

    Пример кракозябров

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

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

    Юникод (Unicode) — универсальные кодировки UTF 8, 16 и 32

    Эти тысячи знаков языковой группы юго-восточной Азии никак невозможно было описать в одном байте информации, который выделялся для кодирования символов в расширенных версиях ASCII. В результате был создан консорциум под названием Юникод (Unicode — Unicode Consortium) при сотрудничестве многих лидеров IT индустрии (те, кто производит софт, кто кодирует железо, кто создает шрифты), которые были заинтересованы в появлении универсальной кодировки текста.

    Первой вариацией, вышедшей под эгидой консорциума Юникод, была UTF 32. Цифра в названии кодировки означает количество бит, которое используется для кодирования одного символа. 32 бита составляют 4 байта информации, которые понадобятся для кодирования одного единственного знака в новой универсальной кодировке UTF.

    В результате чего, один и тот же файл с текстом, закодированный в расширенной версии ASCII и в UTF-32, в последнем случае будет иметь размер (весить) в четыре раза больше. Это плохо, но зато теперь у нас появилась возможность закодировать с помощью ЮТФ число знаков, равное двум в тридцать второй степени (миллиарды символов, которые покроют любое реально необходимое значение с колоссальным запасом).

    Но многим странам с языками европейской группы такое огромное количество знаков использовать в кодировке вовсе и не было необходимости, однако при задействовании UTF-32 они ни за что ни про что получали четырехкратное увеличение веса текстовых документов, а в результате и увеличение объема интернет трафика и объема хранимых данных. Это много, и такое расточительство себе никто не мог позволить.

    В результате развития Юникода появилась UTF-16, которая получилась настолько удачной, что была принята по умолчанию как базовое пространство для всех символов, которые у нас используются. Она использует два байта для кодирования одного знака. Давайте посмотрим, как это дело выглядит.

    В операционной системе Windows вы можете пройти по пути «Пуск» — «Программы» — «Стандартные» — «Служебные» — «Таблица символов». В результате откроется таблица с векторными формами всех установленных у вас в системе шрифтов. Если вы выберете в «Дополнительных параметрах» набор знаков Юникод, то сможете увидеть для каждого шрифта в отдельности весь ассортимент входящих в него символов.

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

    Юникод в формате UTF-16

    Сколько символов можно закодировать в UTF-16 с помощью 16 бит? 65 536 (два в степени шестнадцать), и именно это число было принято за базовое пространство в Юникоде. Помимо этого существуют способы закодировать с помощью нее и около двух миллионов знаков, но ограничились расширенным пространством в миллион символов текста.

    Но даже эта удачная версия кодировки Юникода не принесла особого удовлетворения тем, кто писал, допустим, программы только на английском языке, ибо у них, после перехода от расширенной версии ASCII к UTF-16, вес документов увеличивался в два раза (один байт на один символ в Аски и два байта на тот же самый символ в ЮТФ-16).

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

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

    Что примечательно, в случае кодирования только латиницы, даже те программы, которые не понимают Юникод, все равно прочитают то, что закодировано в ЮТФ-8. Т.е. базовая часть Аски просто перешла в это детище консорциума Unicode.

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

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

    Кракозябры вместо русских букв — как исправить

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

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

    В верхнем меню Notepad++ есть пункт «Кодировки», где у вас будет возможность преобразовать уже имеющийся вариант в тот, который используется на вашем сайте по умолчанию:

    Как исправить кракозябры в кодировке utf-8

    В случае сайта на Joomla 1.5 и выше, а также в случае блога на WordPress следует во избежании появления кракозябров выбирать вариант UTF 8 без BOM. А что такое приставка BOM?

    Дело в том, что когда разрабатывали кодировку ЮТФ-16, зачем-то решили прикрутить к ней такую вещь, как возможность записывать код символа, как в прямой последовательности (например, 0A15), так и в обратной (150A). А для того, чтобы программы понимали, в какой именно последовательности читать коды, и был придуман BOM (Byte Order Mark или, другими словами, сигнатура), которая выражалась в добавлении трех дополнительных байтов в самое начало документов.

    В кодировке UTF-8 никаких BOM предусмотрено в консорциуме Юникод не было и поэтому добавление сигнатуры (этих самых пресловутых дополнительных трех байтов в начало документа) некоторым программам просто-напросто мешает читать код. Поэтому мы всегда при сохранении файлов в ЮТФ должны выбирать вариант без BOM (без сигнатуры). Таким образом, вы заранее обезопасите себя от вылезания кракозябров.

    Что примечательно, некоторые программы в Windows не умеют этого делать (не умеют сохранять текст в ЮТФ-8 без BOM), например, все тот же пресловутый Блокнот Windows. Он сохраняет документ в UTF-8, но все равно добавляет в его начало сигнатуру (три дополнительных байта). Причем эти байты будут всегда одни и те же — читать код в прямой последовательности. Но на серверах из-за этой мелочи может возникнуть проблема — вылезут кракозябры.

    Поэтому ни в коем случае не пользуйтесь обычным блокнотом Windows для редактирования документов вашего сайта, если не хотите появления кракозябров. Лучшим и наиболее простым вариантом я считаю уже упомянутый редактор Notepad++, который практически не имеет недостатков и состоит из одних лишь достоинств.

    В Notepad ++ при выборе кодировки у вас будет возможность преобразовать текст в кодировку UCS-2, которая по своей сути очень близка к стандарту Юникод. Также в Нотепаде можно будет закодировать текст в ANSI, т.е. применительно к русскому языку это будет уже описанная нами чуть выше Windows 1251. Откуда берется эта информация?

    Она прописана в реестре вашей операционной системы Windows — какую кодировку выбирать в случае ANSI, какую выбирать в случае OEM (для русского языка это будет CP866). Если вы установите на своем компьютере другой язык по умолчанию, то и эти кодировки будут заменены на аналогичные из разряда ANSI или OEM для того самого языка.

    После того, как вы в Notepad++ сохраните документ в нужной вам кодировке или же откроете документ с сайта для редактирования, то в правом нижнем углу редактора сможете увидеть ее название:

    Как узнать тип кодировки текстового документа

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

    Вообще, во всех языках гипертекстовой разметки кроме Html используется специальное объявление xml, в котором указывается кодировка текста.

    Прежде, чем начать разбирать код, браузер узнает, какая версия используется и как именно нужно интерпретировать коды символов этого языка. Но что примечательно, в случае, если вы сохраняете документ в принятом по умолчанию юникоде, то это объявление xml можно будет опустить (кодировка будет считаться UTF-8, если нет BOM или ЮТФ-16, если BOM есть).

    В случае же документа языка Html для указания кодировки используется элемент Meta, который прописывается между открывающим и закрывающим тегом Head:

    Эта запись довольно сильно отличается от принятой в стандарте в Html 4.01, но полностью соответствует новому внедряемому потихоньку стандарту Html 5, и она будет стопроцентно правильно понята любыми используемыми на текущий момент браузерами.

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

    Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru

    • �� Binance — лучшая криптобиржа в мире
    • �� Эксмо — лучшая криптобиржа в рунете
    • ⛏ ВоркЗилла — удаленная работа для всех
    • �� Etxt — платят за написание текстов
    • ✍ Кьюкоммент — биржа комментариев
    • �� 60сек — выгодный обмен криптовалют
    • �� Вктаргет — заработок в соцсетях
    • �� Смотреть все.

    Комментарии и отзывы (38)

    Спасибо за интересную статью. Вот про БОМ не знал. В php от крокозябр всегда избавлялся командой: @mysql_query («SET NAMES ‘cp1251’»);

    Да, и ноутпад++ поистине очень удобный инструмент.

    Артем Зыков

    Довольно интересная статья. Здорово, что описываете все так подробно, читая ваши материалы есть ощущение, что попадаешь на лекцию в университет. ��

    Спасибо Вам большое.

    Благодаря Вашей статье решила проблему с арабской кодировкой.

    Статья — интересная, познавательная. Я попыталась вставить тизерную рекламу в сидебар, так вот тексты у тизеров появляются даже не кракозябрами, а какими-то квадратиками в которых 4 латинские буквы в два ряда по 2 шт в каждом.

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

    Как посоветуете изменить ситуацию. Кодировка файла sidebar после включения рекламного блока — правильная. Помогите, пожалуйста разобраться.

    я получила сообщение по почте с приложением Сохранила в компьютере файл ТЕКСТ документа не читается Как раскодировать

    Допустим, если символы закодированные с помощью CP866 попробовать отобразить, используя кодовую таблицу Windows 1251, то эти самые кракозябры (бессмысленный набор символов) и вылезут, полностью заменив собой текст сообщения.

    А что значит закодированые??

    спасибо большое, просто сказка:) книга писателям есть чему у тебя поучиться. Да действительно как я до сих пор без notepad++ обходился, правда есть такой инструмент на все случаи жизни slickedit: платная; но есть возможность пробную лицензию взять.

    Простите, что не в тему немного, но всё-таки хотелось бы разобраться. Может это у меня с виндой косяк, но файлы, созданные с помощью Codelobster, в которых есть русский текст, даже просто txt, когда открываешь их браузером или редактором wordpad, вместо кириллицы отображаются не читаемые символы. В Notepad++ и в блокноте все текст нормально отображается, но в правом углу окна Notepad++ вижу надпись «ANSI as UTF-8», а в документах, содержащих только английский текст (независимо от расширения файла) — «ANSI»! В то время, как файл я сохраняю как UTF-8, оно же стоит по умолчанию и радиокнопку «windows» нажимаю. В чём может быть проблема?

    у меня возникла такая проблема, когда я открываю в интернете документы допустим «Региональные экзамены и тд» то у меня появляется табличка «Параметры фильтра ASCII» и там нужно указать кодировку, стандартный шрифт, язык и разрыв текста((и когда я указываю, как я думаю, то у меня открывается документ со всякой кракозяброй( Помогите плииз.

    Создал блог, все «сохранял в утф-8 без бом».

    Залил скрипт find_bom.php, проверил — все чисто, бома нет.

    Вроде все нормально, но в одном браузере (мозила) — крякозябры.

    Уже и в БД зашел, поменял 1251 на утф, без изменений.

    Нет сейчас возможности проверить, как вокруг воспринимается.

    Что надо еще сделать?

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

    Статья очень познавательная. Жаль только что проблемы она не решает.

    Я делаю форму в html. action:mailto. Но при загрузке обработчика вылезают кракозябры. Я перепробовал все кодировки и атрибуты. пробовал сделать форму отдельно от файла. Не помогает ничего. Подскажите, пожалуйста, что делать!?

    Здравствуйте Дмитрий, пожалуйста помогите разобраться с проблемой. Возможно это связано с кодировкой. У меня комментарии на русском, на блоге, выводятся кубиками и знаками вопросов. Английский же нормально публикуется. В чем может быть проблема? Нигде не могу найти ответ.

    0_о@. +w:(”#@=’,.;;. помогите пожалуйста это прочитать, очень надо , с помощью чего написано не знаю!

    У меня на сайте появилась проблема. На главной при выводе части поста в конце появляется вопросительный знак в черном ромбе. Нигде больше проблем с кодировками больше нет.

    Появилось где-то месяц назад. Плагинов никаких не ставил. Прошу помочь.

    Евгений — Усолец

    Разобрался, а то не мог понять в чём ошибка.

    Благодарю создателя сайта, и автора статьи)

    Спасибо за статью! Продолжайте в том же духе!

    У меня вопрос насчет BOM. Когда я сохраняю без БУМ, получается я сохраняю на utf 8? А когда с БУМ то utf 16? Без БУМ у меня выходит крякозябры. Хотелось бы больше узнать про этот бум. Если файл сохранить с бум ничего фатального в этом нет? С ним объем кодировки увеличивается или что? Что с ним не так? Почему надо без него сохранять?

    Спасибо за статью. Наверное как и многие попал сюда чтоб разобраться — что за зверь эта — utf8 и с чем её едят. Думаю, что разобрался. Мне кажется наглядно было бы привести пример: в Нотепаде написать слово «1234андр» и сохранить в Анси файле и в ЮТФ8 файле. Первый файл будет весить 8 байт, второй 15. Потом второй файл открыть Нотепадом++ и перекодировать в ЮТФ8 без БОМ. После сохранения он будет весить 12 байт. Вот тут-то, опираясь на статью, всё в голове и стает на свои места. Еще раз спасибо.

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

    Статья полезная для общего развития, но практически преобразовать следующую строку

    во что-то удобочитаемое я так и не смог (это название темы Е-письма, пришедшего от loopy.ru, текст письма нормальный). Пользоавлся и Word, и TextViewer, и Hieroglyph и еще 5-6 «крутыми» текстовыми редакторами — везде преобразуется во всё, что угодно, но только не в то, что можно прочитать.

    Спасибо! Отличная статья. Очень доступно. Только в СР866 9C соответствует не ‘М’, а ‘Ь’. Если я не ошибаюсь.

    звучит как «ваши правки одобрены (ерика)».

    Преобразовано из 20866 (русская — КОИ8) в 65001 (UTF-8)

    с помощью AkelPad 4.8.4.

    Имхо, произошло ЭТО из-за того,

    что почтовик отправителя настроен на КОИ8 (текст),

    а Ваш (Mashinist) почтовик настроен на UTF-8 (html).

    Поэтому ТЕЛО письма читалось хорошо,

    а ТЕМА письма это только текст в соответствующей кодировке.

    У меня с Codelobster тот же косяк что и у Степана.

    Все настройки перепробовал, всё равно просто utf-8 и ни каким «без BOM» и не пахнет.

    Нажимаешь файл->изменить кодировку — меняет, закрываешь-открываешь нету «BOM» он его опять сам как то по своему перекодирует.

    Вот зараза. Пришлось такие файлы только в notepad++ редактировать.

    1. Чтобы новый файл создавался в кодировке утф 8 (это мы увидим в notepad++) в настройках по умолчанию выбираем не With BOM — а просто UTF-8 .

    2. Возможно, помогло ещё в настройках->форматирование выбрать Drupal (я с ним работаю)

    Теперь при создании и редактирования файла кодировка сохраняется — «ANSI as UTF-8», но показывается просто как утф-8. Только изменить любую другую кодировку на «ANSI as UTF-8» в Codelobstere по прежнему не работает, это можно сделать например в notepad++.

    Метод научного тыка рулит!

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

    использую WinSyntax 2.0 как и нотпад подсвечивает код,

    в XPюше стандартный блокнот на SP2 поддерживает сохранение в UTF-8 без BOM, почему-то в новых таковую функцию убрали.

    zee, вот тебе http://2cyr.com/decode/?lang=ru, делай парсер

    А у меня в реестре винды есть строка в Юникоде. Удалить невозможно. Это из-за того, что нечитаемо? Служба BonanzaDealsLive (bonanzadealslive)

    Спасибо, буду бороться со своей бедой

    Спасибо большое, решила проблему с выводом русских букв в меню на сайте на WordPress

    Константин

    Спасибо, решен вопрос с кодировкой формы обратной связи.

    Давно уже пора признать что это доселе неизвестный вирус! Как вы объясните кракозябры в отдельных файлах word и блокноте windows ? После замены файлов с кракозябрами на нормальные, с архивного диска, на следующий день они опять стали с кракозябрами. Вирус пометил почему то именно эти файлы.

    Спасибо за Ваш труд. Все ясно и легко изложено. Долгое время не мог решить свою проблему отображения текста в письмах, но благодаря Вашей статье — все решил, а более того приобрёл опыт. Занес Вас в закладки! Спасибо!

    Ребята, а какая версия Юникода в виндоусе стоит? ведь Unicode постоянно развивается, сейчас уже 9 версию. У меня например стоит windows 8.1 и он ни разу не принимал обновления. Какая в нем версию Юникод ?

    А как же иНЖАЛИД ДЕЖИЦЕ?

    Видать не всегда АСКИ

    Ребята, кто-то помогите раскодировать текст с «Кириллица (DOS/OS2-866/русский)» или с —

    Кириллица (Apple Macintosh)

    Ничего не помогает, у меня при незначительном сбое в системе, пропало 45 страниц текста нового романа, что я пишу, превратившись в бесконечный повтор одного символа (как чаще всего) — #######################################. и так на все сорок пять страниц текста.

    Я работал в текстовом редакторе OpenOffice.org 4.1.3 (последняя версия) и перепробовал все вышеуказанные кодировки, бесполезно. оригинальный текст был на шрифте Constansia (русский)

    Пробовал через сайт OpenOffice просить помощь, там все на энглиш и на десятке языков кроме русского (видать санкции или хрен знает что) пробовал писать через е-мейл — ответ на английском — гугловские переводчики переводят на русский — плакать хочется.

    Очень классная статья

    Предлагаю чуть улучшить и заодно прояснить для меня один момент.

    В разделе «ASCII — базовая кодировка текста для латиницы», где мы получили число 233, дальше перевели его в шестнадцатеричное, получив E9.

    Как его использовать в таблицах различных кодировок? Первый символ «Е» смотреть по вертикали или по горизонтали?

    Примеры с различными кодировками (какие символы соответствуют Е9), как по мне, были бы нелишними.

    Ваш комментарий или отзыв

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *