Как работают кодировки текста. Откуда появляются «кракозябры». Принципы кодирования. Обобщение и детальный разбор
Данная статья имеет цель собрать воедино и разобрать принципы и механизм работы кодировок текста, подробно этот механизм разобрать и объяснить. Полезна она будет тем, кто только примерно представляет, что такое кодировки текста и как они работают, чем отличаются друг от друга, почему иногда появляются не читаемые символы, какой принцип кодирования имеют разные кодировки.
Чтобы получить детальное понимание этого вопроса придется прочитать и свести воедино не одну статью и потратить довольно значительное время на это. В данном материале же это все собрано воедино и по идее должно сэкономить время и разбор на мой взгляд получился довольно подробный.
О чем будет под катом: принцип работы одно байтовых кодировок (ASCII, Windows-1251 и т.д.), предпосылки появления Unicode, что такое Unicode, Unicode-кодировки UTF-8, UTF-16, их отличия, принципиальные особенности, совместимость и несовместимость разных кодировок, принципы кодирования символов, практический разбор кодирования и декодирования.
Вопрос с кодировками сейчас конечно уже потерял актуальность, но все же знать как они работают сейчас и как работали раньше и при этом не потратить много времени на это думаю лишним не будет.
Предпосылки Unicode
Начать думаю стоит с того времени когда компьютеризация еще не была так сильно развита и только набирала обороты. Тогда разработчики и стандартизаторы еще не думали, что компьютеры и интернет наберут такую огромную популярность и распространенность. Собственно тогда то и возникла потребность в кодировке текста. В каком то же виде нужно было хранить буквы в компьютере, а он (компьютер) только единицы и нули понимает. Так была разработана одно-байтовая кодировка ASCII (скорее всего она не первая кодировка, но она наиболее распространенная и показательная, по этому ее будем считать за эталонную). Что она из себя представляет? Каждый символ в этой кодировке закодирован 8-ю битами. Несложно посчитать что исходя из этого кодировка может содержать 256 символов (восемь бит, нулей или единиц 2 8 =256).
Первые 7 бит (128 символов 2 7 =128) в этой кодировке были отданы под символы латинского алфавита, управляющие символы (такие как переносы строк, табуляция и т.д.) и грамматические символы. Остальные отводились под национальные языки. То есть получилось что первые 128 символов всегда одинаковые, а если хочешь закодировать свой родной язык пожалуйста, используй оставшуюся емкость. Собственно так и появился огромный зоопарк национальных кодировок. И теперь сами можете представить, вот например я находясь в России беру и создаю текстовый документ, у меня по умолчанию он создается в кодировке Windows-1251 (русская кодировка использующаяся в ОС Windows) и отсылаю его кому то, например в США. Даже то что мой собеседник знает русский язык, ему не поможет, потому что открыв мой документ на своем компьютере (в редакторе с дефолтной кодировкой той же самой ASCII) он увидит не русские буквы, а кракозябры. Если быть точнее, то те места в документе которые я напишу на английском отобразятся без проблем, потому что первые 128 символов кодировок Windows-1251 и ASCII одинаковые, но вот там где я написал русский текст, если он в своем редакторе не укажет правильную кодировку будут в виде кракозябр.
Думаю проблема с национальными кодировками понятна. Собственно этих национальных кодировок стало очень много, а интернет стал очень широким, и в нем каждый хотел писать на своем языке и не хотел чтобы его язык выглядел как кракозябры. Было два выхода, указывать для каждой страницы кодировки, либо создать одну общую для всех символов в мире таблицу символов. Победил второй вариант, так создали Unicode таблицу символов.
Небольшой практикум ASCII
Возможно покажется элементарщиной, но раз уж решил объяснять все и подробно, то это надо.
Вот таблица символов ASCII:
Тут имеем 3 колонки:
- номер символа в десятичном формате
- номер символа в шестнадцатиричном формате
- представление самого символа.
Unicode
С предпосылками создания общей таблицы для всех в мире символов, разобрались. Теперь собственно, к самой таблице. Unicode — именно эта таблица и есть (это не кодировка, а именно таблица символов). Она состоит из 1 114 112 позиций. Большинство этих позиций пока не заполнены символами, так что вряд ли понадобится это пространство расширять.
Разделено это общее пространство на 17 блоков, по 65 536 символов в каждом. Каждый блок содержит свою группу символов. Нулевой блок — базовый, там собраны наиболее употребляемые символы всех современных алфавитов. Во втором блоке находятся символы вымерших языков. Есть два блока отведенные под частное использование. Большинство блоков пока не заполнены.
Итого емкость символов юникода составляет от 0 до 10FFFF (в шестнадцатиричном виде).
Записываются символы в шестнадцатиричном виде с приставкой «U+». Например первый базовый блок включает в себя символы от U+0000 до U+FFFF (от 0 до 65 535), а последний семнадцатый блок от U+100000 до U+10FFFF (от 1 048 576 до 1 114 111).
Отлично теперь вместо зоопарка национальных кодировок, у нас есть всеобъемлющая таблица, в которой зашифрованы все символы которые нам могут пригодиться. Но тут тоже есть свои недостатки. Если раньше каждый символ был закодирован одним байтом, то теперь он может быть закодирован разным количеством байтов. Например для кодирования всех символов английского алфавита по прежнему достаточно одного байта например тот же символ «o» (англ.) имеет в юникоде номер U+006F, то есть тот же самый номер как и в ASCII — 6F в шестнадцатиричной и 111 в десятеричной. А вот для кодирования символа «U+103D5» (это древнеперсидская цифра сто) — 103D5 в шестнадцатиричной и 66 517 в десятеричной, тут нам потребуется уже три байта.
Решить эту проблему уже должны юникод-кодировки, такие как UTF-8 и UTF-16. Далее речь пойдет про них.
UTF-8 является юникод-кодировкой переменной длинны, с помощью которой можно представить любой символ юникода.
Давайте поподробнее про переменную длину, что это значит? Первым делом надо сказать, что структурной (атомарной) единицей этой кодировки является байт. То что кодировка переменной длинны, значит, что один символ может быть закодирован разным количеством структурных единиц кодировки, то есть разным количеством байтов. Так например латиница кодируется одним байтом, а кириллица двумя байтами.
Немного отступлю от темы, надо написать про совместимость ASCII и UTF
То что латинские символы и основные управляющие конструкции, такие как переносы строк, табуляции и т.д. закодированы одним байтом делает utf-кодировки совместимыми с кодировками ASCII. То есть фактически латиница и управляющие конструкции находятся на тех же самых местах как в ASCII, так и в UTF, и то что закодированы они и там и там одним байтом и обеспечивает эту совместимость.
Давайте возьмем символ «o»(англ.) из примера про ASCII выше. Помним что в таблице ASCII символов он находится на 111 позиции, в битовом виде это будет 01101111 . В таблице юникода этот символ — U+006F что в битовом виде тоже будет 01101111 . И теперь так, как UTF — это кодировка переменной длины, то в ней этот символ будет закодирован одним байтом. То есть представление данного символа в обеих кодировках будет одинаково. И так для всего диапазона символов от 0 до 128. То есть если ваш документ состоит из английского текста то вы не заметите разницы если откроете его и в кодировке UTF-8 и UTF-16 и ASCII (прим. в UTF-16 такие символы все равно будут закодированы двумя байтами, по этому вы не увидите разницы, если ваш редактор будет игнорировать нулевые байты), и так до момента пока вы не начнете работать с национальным алфавитом.
Сравним на практике как будет выглядеть фраза «Hello мир» в трех разных кодировках: Windows-1251 (русская кодировка), ISO-8859-1 (кодировка западно-европейских языков), UTF-8 (юникод-кодировка). Суть данного примера состоит в том что фраза написана на двух языках. Посмотрим как она будет выглядеть в разных кодировках.
В кодировке ISO-8859-1 нет таких символов «м», «и» и «р».
Теперь давайте поработаем с кодировками и разберемся как преобразовать строку из одной кодировки в другую и что будет если преобразование неправильное, или его нельзя осуществить из за разницы в кодировках.
Будем считать что изначально фраза была записана в кодировке Windows-1251. Исходя из таблицы выше запишем эту фразу в двоичном виде, в кодировке Windows-1251. Для этого нам потребуется всего только перевести из десятеричной или шестнадцатиричной системы (из таблицы выше) символы в двоичную.
01001000 01100101 01101100 01101100 01101111 00100000 11101100 11101000 11110000
Отлично, вот это и есть фраза «Hello мир» в кодировке Windows-1251.
Теперь представим что вы имеете файл с текстом, но не знаете в какой кодировке этот текст. Вы предполагаете что он в кодировке ISO-8859-1 и открываете его в своем редакторе в этой кодировке. Как сказано выше с частью символов все в порядке, они есть в этой кодировке, и даже находятся на тех же местах, но вот с символами из слова «мир» все сложнее. Этих символов в этой кодировке нет, а на их местах в кодировке ISO-8859-1 находятся совершенно другие символы. А конкретно «м» — позиция 236, «и» — 232. «р» — 240. И на этих позициях в кодировке ISO-8859-1 находятся следующие символы позиция 236 — символ «ì», 232 — «è», 240 — «ð»
Значит фраза «Hello мир» закодированная в Windows-1251 и открытая в кодировке ISO-8859-1 будет выглядеть так: «Hello ìèð». Вот и получается что эти две кодировки совместимы лишь частично, и корректно перекодировать строку из одной кодировке в другую не получится, потому что там просто напросто нет таких символов.
Тут и будут необходимы юникод-кодировки, а конкретно в данном случае рассмотрим UTF-8. То что символы в ней могут быть закодированы разным количеством байтов от 1 до 4 мы уже выяснили. Теперь стоит сказать что с помощью UTF могут быть закодированы не только 256 символов, как в двух предыдущих, а вобще все символы юникода
Работает она следующим образом. Первый бит каждого байта кодирующего символ отвечает не за сам символ, а за определение байта. То есть например если ведущий (первый) бит нулевой, то это значит что для кодирования символа используется всего один байт. Что и обеспечивает совместимость с ASCII. Если внимательно посмотрите на таблицу символов ASCII то увидите что первые 128 символов (английский алфавит, управляющие символы и знаки препинания) если их привести к двоичному виду, все начинаются с нулевого бита (будьте внимательны, если будете переводить символы в двоичную систему с помощью например онлайн конвертера, то первый нулевой ведущий бит может быть отброшен, что может сбить с толку).
01001000 — первый бит ноль, значит 1 байт кодирует 1 символ -> «H»
01100101 — первый бит ноль, значит 1 байт кодирует 1 символ -> «e»
Если первый бит не нулевой то символ кодируется несколькими байтами.
Для двухбайтовых символов первые три бита должны быть такие — 110
110 10000 10 111100 — в начале 110, значит 2 байта кодируют 1 символ. Второй байт в таком случае всегда начинается с 10. Итого отбрасываем управляющие биты (начальные, которые выделены красным и зеленым) и берем все оставшиеся ( 10000111100 ), переводим их в шестнадцатиричный вид (043С) -> U+043C в юникоде равно символ «м».
для трех-байтовых символов в первом байте ведущие биты — 1110
1110 1000 10 000111 10 1010101 — суммируем все кроме управляющих битов и получаем что в 16-ричной равно 103В5, U+103D5 — древнеперситдская цифра сто ( 10000001111010101 )
для четырех-байтовых символов в первом байте ведущие биты — 11110
11110 100 10 001111 10 111111 10 111111 — U+10FFFF это последний допустимый символ в таблице юникода ( 100001111111111111111 )
Теперь, при желании, можем записать нашу фразу в кодировке UTF-8.
UTF-16
UTF-16 также является кодировкой переменной длинны. Главное ее отличие от UTF-8 состоит в том что структурной единицей в ней является не один а два байта. То есть в кодировке UTF-16 любой символ юникода может быть закодирован либо двумя, либо четырьмя байтами. Давайте для понятности в дальнейшем пару таких байтов я буду называть кодовой парой. Исходя из этого любой символ юникода в кодировке UTF-16 может быть закодирован либо одной кодовой парой, либо двумя.
Начнем с символов которые кодируются одной кодовой парой. Легко посчитать что таких символов может быть 65 535 (2в16), что полностью совпадает с базовым блоком юникода. Все символы находящиеся в этом блоке юникода в кодировке UTF-16 будут закодированы одной кодовой парой (двумя байтами), тут все просто.
символ «o» (латиница) — 00000000 01101111
символ «M» (кириллица) — 00000100 00011100
Теперь рассмотрим символы за пределами базового юникод диапазона. Для их кодирования потребуется уже две кодовые пары (4 байта). И механизм их кодирования немного сложнее, давайте по порядку.
Для начала введем понятия суррогатной пары. Суррогатная пара — это две кодовые пары используемые для кодирования одного символа (итого 4 байта). Для таких суррогатных пар в таблице юникода отведен специальный диапазон от D800 до DFFF. Это значит, что при преобразовании кодовой пары из байтового вида в шестнадцатиричный вы получаете число из этого диапазона, то перед вами не самостоятельный символ, а суррогатная пара.
Чтобы закодировать символ из диапазона 10000 — 10FFFF (то есть символ для которого нужно использовать более одной кодовой пары) нужно:
- из кода символа вычесть 10000(шестнадцатиричное) (это наименьшее число из диапазона 10000 — 10FFFF)
- в результате первого пункта будет получено число не больше FFFFF, занимающее до 20 бит
- ведущие 10 бит из полученного числа суммируются с D800 (начало диапазона суррогатных пар в юникоде)
- следующие 10 бит суммируются с DC00 (тоже число из диапазона суррогатных пар)
- после этого получатся 2 суррогатные пары по 16 бит, первые 6 бит в каждой такой паре отвечают за определение того что это суррогат,
- десятый бит в каждом суррогате отвечает за его порядок если это 1 то это первый суррогат, если 0, то второй
Для примера зашифруем символ, а потом расшифруем. Возьмем древнеперсидскую цифру сто (U+103D5):
Появились кракозябры вместо русских букв
Важно понимать, что как правило проблемы возникают именно с русским языком. Т.е. с английским и другими языками на латинице проблем не возникает. Дело в том, что русский язык – это кириллица. Поэтому решать проблему будем с кириллицей, а не столько с русскими буками. Учтите, что далеко не все утилиты поддерживают этот язык, и дело как раз в кодировке. Однако, если утилита официальная, популярная и современная, то любые трудности с отображением текста – это явная проблема, с которой нужно бороться.
Первым делом нужно проверить настройки компьютера. Для этого зайдите в «Панель управления». Для этого правым кликом мышки на Пуск вызовите диалоговое меню, в котором будет соответствующий пункт.
После этого откроется окно, в котором вам нужно изменить ражим «Просмотр» на «Категория», и дальше выбрать пункт «Часы, язык, регион».
Откроется новое окно, где нужно выбрать «Региональные стандарты».
Не смотрите на то, что здесь настраиваются часы и время, вам нужно перейти в раздел «Дополнительно», где вы сможете найти необходимый пункт про отображение необходимой локали отображения символов в операционной системе. Это именно то, что вам нужно.
В новом окне найдите пункт «Язык программ, не поддерживающих Юникод». На этой странице вам нужно найти пункт «Изменить язык системы».
Кликаем на пункт выше, и в новом окне выбираем вариант «Русский (Россия)».
Не пугайтесь, сразу после выбора или смены вы увидите оповещение о том, что ваш ПК будет перезагружен. Единственное, что вы можете сделать – отменить изменения, вернуться к ним позже или перезагрузить устройство прямо сейчас. Выбирайте опцию, которая более комфортна вам по душе.
После того, как ваш компьютер был перезагружен, попробуйте запустить тот софт, который ранее выдавал проблему. Скорее всего, ситуация изменится кардинальным образом. И вы увидите уже русские буквы, на крайний случай английские. Например вот так:
Это самый простой метод, пусть он таковым и не выглядит. Учтите, что система может потребовать от вас внести некоторые изменения в реестр в ручном режиме. Вы можете это сделать даже без специальных знаний в компьютерах. Поэтому попробуйте проделать следующие шаги, описанные ниже.
Откройте любой бесплатный текстовый редактор. Подойдет даже Блокнот, а вот Word – не самый удачный выбор, так как этот редактор зачастую меняет структуру кода, и в результате ниже описанный метод либо вовсе не будет работать, либо сработает но не так.
Далее в текстовом редакторе создайте пустой файл, которому выдадите разрешение .reg. Это разрешение соответствует разрешению реестра Windows 10. Сам файл далее дополним следующей информацией:
Windows Registry Editor Version 5.00
«Comic Sans MS,0″=»Comic Sans MS,204»
«MS Sans Serif,0″=»MS Sans Serif,204»
«Times New Roman,0″=»Times New Roman,204»
Сохраняемся. У файла может быть любое имя, важно, чтобы у него было указанное выше разрешение. Далее, после того как внутри файла оказалась приведенная выше информация, вам нужно внести изменения в реестр. Для этого используйте простую методику – кликните по файлу таким образом, как будто хотите его открыть. Но не в текстовом редакторе, а именно запустить. Для этого потребуется отменить «Программу по умолчанию» в виде редактора, если вы выбрали редактор.
ОС уточнит у вас, если вы хотите внести изменения в реестр своего компьютера. Соглашайтесь. Конечно, тем, кто переживает больше обычного, можем порекомендовать сделать резервную копию реестра. Для этого опять же не потребуется никаких специальных знаний. Можете использовать CCleaner, чтобы создать копию или резервный файл.
Надеемся, теперь кракозябры и иероглифы на Windows 10 вместо букв если и не перестанут появляться, то вы теперь хотя бы знаете, как с ними бороться. Учтите, что в некоторых случаях виноват все же разработчик утилиты, и даже если вы проделаете все, что описано выше, то все равно не придете к нужному результату. В этом случае, вам лучше скачать другой дистрибутив, возможно не на русском, а на английском. Также можете попробовать запуститься в безопасном режиме, и проверить если там ПО работает как надо. Если да, то тогда у вас есть все шансы исправить ситуацию и в нормальном обычном режиме.
Исправляем отображение русских букв в Windows 10
Существует два способа решения рассматриваемой проблемы. Связаны они с редактированием настроек системы или определенных файлов. Они отличаются по сложности и эффективности, поэтому мы начнем с легкого. Если первый вариант не принесет никакого результата, переходите ко второму и внимательно следуйте описанным там инструкциям.
В первую очередь хотелось бы отметить такую настройку как «Региональные стандарты». В зависимости от его состояния и производится дальнейшее отображение текста во многих системных и сторонних программах. Редактировать его под русский язык можно следующим образом:
-
- Откройте меню «Пуск» и в строке поиска напечатайте «Панель управления». Кликните на отобразившийся результат, чтобы перейти к этому приложению.
-
- Среди присутствующих элементов отыщите «Региональные стандарты» и нажмите левой кнопкой мыши на этот значок.
-
- Появится новое меню с несколькими вкладками. В данном случае вас интересует «Дополнительно», где нужно кликнуть на кнопку «Изменить язык системы…».
-
- Убедитесь в том, что выбран пункт «Русский (Россия)», если это не так, то во всплывающем меню укажите его. Можем также порекомендовать активировать бета-версию Юникода — это также иногда сказывается на корректном отображении кириллицы. После всех правок нажмите на «ОК».
-
- Корректировки вступят в силу только после перезагрузки ПК, о чем вы и будете уведомлены при выходе из меню настроек.
Дождитесь перезапуска компьютера и проверьте, получилось ли исправить проблему с русскими буквами. Если нет, переходите к следующему, более сложному варианту решения этой задачи.
Кодовые страницы выполняют функцию сопоставления символов с байтами. Существует множество разновидностей таких таблиц, каждая из которых работает с определенным языком. Часто причиной появления кракозябров является именно неправильно выбранная страница. Далее мы расскажем, как править значения в редакторе реестра.
Перед выполнением этого метода настоятельно рекомендуем создать точку восстановления, она поможет вернуть конфигурацию до внесения ваших изменений, если после них что-то пойдет не так. Детальное руководство по данной теме вы найдете в другом нашем материале по ссылке ниже.
Подробнее: Инструкция по созданию точки восстановления Windows 10
-
- Нажатием на комбинацию клавиш Win + R запустите приложение «Выполнить», в строке напечатайте regedit и кликните на «ОК».
- В окне редактирования реестра находится множество директорий и параметров. Все они структурированы, а необходимая вам папка расположена по следующему пути:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNls
- Выберите «CodePage» и опуститесь в самый низ, чтобы отыскать там имя «ACP». В столбце «Значение» вы увидите четыре цифры, в случае когда там выставлено не 1251, дважды кликните ЛКМ на строке.
-
- Двойное нажатие левой кнопкой мыши открывает окно изменения строковой настройки, где и требуется выставить значение 1251.
Если же значение и так уже является 1251, следует провести немного другие действия:
-
- В этой же папке «CodePage» поднимитесь вверх по списку и отыщите строковый параметр с названием «1252» Справа вы увидите, что его значение имеет вид с_1252.nls. Его нужно исправить, поставив вместо последней двойки единицу. Дважды кликните на строке.
-
- Откроется окно редактирования, в котором и выполните требуемую манипуляцию.
После завершения работы с редактором реестра обязательно перезагрузите ПК, чтобы все корректировки вступили в силу.
Подмена кодовой страницы
Некоторые пользователи не хотят править реестр по определенным причинам либо же считают эту задачу слишком сложной. Альтернативным вариантом изменения кодовой страницы является ее ручная подмена. Производится она буквально в несколько действий:
-
- Откройте «Этот компьютер» и перейдите по пути C:WindowsSystem32, отыщите в папке файл С_1252.NLS, кликните на нем правой кнопкой мыши и выберите «Свойства».
-
- Переместитесь во вкладку «Безопасность» и найдите кнопку «Дополнительно».
-
- Вам нужно установить имя владельца, для этого кликните на соответствующую ссылку вверху.
-
- В пустом поле впишите имя активного пользователя, обладающего правами администратора, после чего нажмите на «ОК».
-
- Вы снова попадете во вкладку «Безопасность», где требуется откорректировать параметры доступа администраторов.
-
- Выделите ЛКМ строку «Администраторы» и предоставьте им полный доступ, установив галочку напротив соответствующего пункта. По завершении не забудьте применить изменения.
-
- Вернитесь в открытую ранее директорию и переименуйте отредактированный файл, поменяв его расширение с NLS, например, на TXT. Далее с зажатым CTRL потяните элемент «C_1251.NLS» вверх для создания его копии.
-
- Нажмите на созданной копии правой кнопкой мыши и переименуйте объект в C_1252.NLS.
Вот таким нехитрым образом происходит подмена кодовых страниц. Осталось только перезапустить ПК и убедиться в том, что метод оказался эффективным.
Как видите, исправлению ошибки с отображением русского текста в операционной системе Windows 10 способствуют два достаточно легких метода. Выше вы были ознакомлены с каждым. Надеемся, предоставленное нами руководство помогло справиться с этой неполадкой.
Что делать, чтобы сменить кодировку в Блокноте по умолчанию с ANSI на другую:
- Открываем Блокнот или создаём новый текстовый документ и потом его открываем в Блокноте
- Меняем кодировку текстового файла
- Сохраняем этот документ (я свой назвал по названию кодировки UTF-8.txt)
- Если не видно расширение файла, то можно его сделать видимым
- Можно сохранить файл и переименовать
- Если папки нет (что мало вероятно), то её нужно создать и также переместить на место: C:WindowsShellNew
- С именемFileName
- Со значениемUTF-8.txt (имя того файла, который мы создали в п.3 перенесли в папку C:WindowsShellNew в п.4)
Теперь при создании текстового файла с помощью контекстного меню у него будет та кодировка, которая была нами установлена в файле-образце, лежащем в папке C:WindowsShellNew.
Инструкция по изменению кодировки в стандартном блокноте
Его обычно можно найти по следующему пути: «пуск», «все программы», «стандартные». Нашли? Давайте откроем. Если требуется произвести работы с уже существующем документом, то нажимаем «файл», «открыть» и выбираем его.
После написания текста или открытия готового документа в меню «файл» нажимаем «сохранить как».
После этого на экране появляется окно, в котором можно выбрать подходящий вариант из представленного списка.
Выбираем подходящий вариант, место сохранения документа и подтверждаем операцию. Вот и всё. Было просто? На самом деле для выполнения нужных работ могут потребоваться лишь считанные секунды.
Как исправить кракозябры и иероглифы в Windows 10
- Нажмите Win + R и введите control. Система откроет классическую Панель управления.
- На главной странице перейдите в группу Часы, язык и регион – Изменение форматов даты, времени и чисел.
- На открывшемся окне Регион откройте вкладку Дополнительно.
- Нажмите кнопку Изменить язык системы в секции окна Язык программ, не поддерживающих Юникод.
- В открывшемся окошке выберите из выпадающего списка необходимый вам язык, к примеру, Русский (Россия). Нажмите Ок.
- Windows предупредит вас, что необходимо перезагрузить компьютер, чтобы изменения вступили в силу. Согласитесь на перезагрузку сейчас и нажмите Перезагрузить сейчас.
После запуска компьютера текст должен отображаться как положено.
Простые решения
Решения, приведённые ниже, просты, поскольку не требуют от пользователя каких-то серьёзных действий. Однако их может быть достаточно для решения проблемы. При этом можно будет обойтись без заморочек.
Наиболее часто иероглифы вместо текста вылезают при печати через MS Word. Попробуйте распечатать текст при помощи другой программы.
Для этого можно пересохранить файл в формате PDF и открыть при помощи программы Adobe Acrobat Reader или FoxitReader. Распечатать также можно через браузер, например, через Google Chrome или Internet Explorer.
Попробуйте вместо текста распечатать изображение. Для этого нужно:
- Открыть окно в программе, которое используется для отправки файла на печать.
- Найти на нём кнопку «Дополнительно» или «Дополнительные настройки», зависит от программы, в которой производится печать.
- В открывшемся окне найти параметр «Печать как изображение» или «Растровая печать», поставить напротив него галочку.
Текст машина теперь печатает как изображение. Иероглифы вместо русских букв вы, скорее всего, не увидите.
Проблема может заключаться в шрифтах. Девайс их не читает, а печатает непонятные символы вместо русских букв. Попробуйте просто использовать другие шрифты для текста. Особенно это будет актуально, если вы взяли не классические (Arial, Calibri), а экзотические шрифты.
Также попробуйте следующее: запретите подставлять Courier New. Для этого:
- На Панели управления найдите пункт с устройствами.
Устройства и принтеры
- Найдите там проблемный принтер.
- Откройте «Свойства принтера», перейдите во вкладку «Параметры устройства».
- Найдите таблицу подстановки шрифтов и выберете «Не подставлять» для шрифта, указанного выше.
Сложные решения
К этим решениям стоит переходить, если проблема никак отказывается уходить и продолжает досаждать. Иероглифы вместо русских букв устройство печатает по причинам, которые будут разобраны ниже.
Дело может быть в системных файлах. Их восстановление может избавить от проблемы.
Открываем командную строку от имени администратора. Вбиваем команду «sfc /scannow» и жмём «Ввод».
Команда «sfc /scannow»
Ждём несколько минут или секунд. Затем проверяем, решилась ли проблема.
Часто такая ошибка появляется из-за драйверов. Принтер печатает иероглифы, поскольку драйверы неправильные или дают сбои. Поэтому можно попробовать их переустановить. Для этого:
- Во вкладке Панели управления «Оборудование и звук» находим наш принтер.
Вкладка «Оборудование и звук»
- Нажимаем ПКМ, выбираем «Удалить устройство».
- В «Программах и компонентах» удаляем все программы, связанные с работой нашего аппарата.
- После удаления находим диск, который идёт вместе с устройством печати. Снего заново устанавливаем все необходимые программы и драйверы.
Если диска у вас нет, то Windows 7 или старше, как правило, сама предлагает установить необходимые драйверы, если заново подключить принтер к компьютеру. Если этого не произошло, то стоит зайти на сайт компании-производителя и скачать необходимое ПО самостоятельно.
Проверьте компьютер антивирусом. Причина может крыться во вредоносном ПО.
Вот основные способы разрешения этой проблемы. Как правило, можно ограничиться простыми действиями, поскольку эта ошибка то появляется, то исчезает сама собой.
Смените программу для печати
Попробуйте распечатать документ в другой программе. Нередко проблема заключается именно в печатающем софте. Для открытия файлов PDF можете использовать софт от Adobe или Foxit reader. Если в Adobe вместо текста на листе отображаются иероглифы, тогда можно попробовать распечатать файл как изображение.
Дополнительно попробуйте открыть документ в браузере и выполнить печать.
Причина еще может быть в шрифте, который использовался при наборе текста. Всегда рекомендуется выбирать стандартные шрифты, например, Arial, Tahoma, Verdana, Times New Roman.
Если сбоит офисный пакет Word, тогда можно сохранить файл в другом формате, например, в PDF. Делается это через меню «Файл» — «Сохранить как».
Описанные варианты решения проблемы рабочие, но являются временными. Принтер должен печатать текст без иероглифов в любой программе. Поэтому надо копнуть глубже и постараться выявить причину возникновения иероглифов.
Появляются непонятные знаки ММММ в конце строки 🙁
почему в конце строки появляются непонятные лишние символы?
"Процессор компьютера — это большая интегральная микросхема. Все команды и данные он получает в виде электрических сигналов, но их можно представить и как совокупность нулей и единиц, т. е. числами. Поэтому реально программа, с которой работает процессор, представляет собой последовательность чисел, называемых машинным кодом. Написать программу в машинном коде достаточно сложно, причем сложность раб" — это текст из 1.txt
Чтения из файла — в конце появляются непонятные символы
Читаю из файла так char str; char ch; int i=0; while ( (ch = getc(fp)) != EOF ) <.При загрузке комьютера появляются непонятные строки
Доброго времени суток Подскажите плз что происходит дело вот в чём , при загрузке компа.Откуда в конце строки появляются дополнительные символы?
#include "stdafx.h" #include "math.h" #include "iostream" #include "string" #include.Почему в конце символьной строки появляются разные символы, и что с ними делать?
В строке, содержащей последовательность слов, найти конец предложения, обозначенный символом.Сообщение от Kyuz
Сообщение от Kyuz
как это исправить?
Добавлено через 1 минуту
можно простым языком, я C++ первый день вижу вблизиСообщение было отмечено Kyuz как решение
Решение
Сообщение от Kyuz
Вообще это не C++, а C. В си строкой считается последовательность символов, оканчивающаяся символом с кодом 0, т.е. если вы создадите массив из символов и в нём не будет нулевого, при считывании, программа не сможет остановиться и пойдёт читать память, которая находится уже за пределами массива и, либо таки найдёт его в чужой памяти и остановится, либо упадёт с ошибкой. У вас в примере вы сначала зануляете массив(на самом деле это не нужно делать), а потом вместо всех нулей пишете данные из файла и в итоге у вас 401 не нулевой символ и как следствие, при выводе этой "строки", программа выходит за пределы массива.