Windows 1252 кодировка на русский язык

Всех приветствую на портале WiFiGiD.RU. Сегодня мы рассмотрим еще одну достаточно популярную проблему, когда в Windows вместо букв отображаются кракозябры, иероглифы, знаки вопроса и какие-то непонятные символы. Проблема встречается на всех версиях Windows 10, 11, 7 и 8, и решается она одинаково. Причем кракозябры могут быть как в отдельных программах (например, в блокноте или Word) или системных окнах (в проводнике, компьютере или панели управления). В статье я расскажу вам, как можно исправить кодировку и вернуть все на свои места.

Содержание

  1. Способ 1: Изменение системного языка
  2. Способ 2: Изменение кодовой таблицы
  3. Способ 3: Подмена файлов
  4. Способ 4: Дополнительные советы
  5. Задать вопрос автору статьи

Способ 1: Изменение системного языка

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

Итак, у нас вместо русских букв отображаются знаки вопроса или другие непонятные символы в Windows – давайте разбираться вместе. После установки английской или любой другой версии, есть вероятность, что язык, который установлен в системе, установился неправильно. Второй вариант – когда региональные стандарты языка были сбиты или установлены не так как нужно. Давайте это исправим.

  1. Зажимаем на клавиатуре две клавиши:

+ R

  1. Теперь используем команду:

control

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. В панели управления найдите пункт «Региональные стандарты» – ориентируйтесь на значок. Если вы видите, что пунктов не так много как у меня, измените режим «Просмотра».

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. На второй вкладке нажмите по кнопке «Изменить язык…».

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. Сначала в первом пункте установите «Русский» язык. Ниже есть настройка использования Юникода (UTF-8). Если эта галочка стоит, значит попробуйте её убрать. Если эта конфигурация, наоборот, выключена – активируйте. Нажмите «ОК».

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. Вас попросят перезагрузиться – сделайте это.

Способ 2: Изменение кодовой таблицы

Смотрите, каждому символу кириллицы соответствует свое отображение. Также у каждого такого символа есть специальный байтовый код. Чтобы все это работало нормально, для каждого символа и байта есть таблица соответствия. Если таблица выбрана неправильно, код байта будет показывать иероглифы – вопросительные знаки или еще какие кракозябры.

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

Читаем – как создать точку восстановления.

После этого переходим к описанным ниже шагам:

  1. Используем наши любимые волшебные кнопки:

+ R

  1. Вводим команду:

regedit

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. Можете скопировать путь, который я укажу ниже, и вставить в адресную строку. Или просто пройтись по папкам и разделам вручную.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage

  1. В правом блоке, где находится список файлов с конфигурациями, в самом низу найдите:

ACP

  1. Именно этот файл отвечает за настройку соответствия таблицы символов. Два раза кликните левой кнопкой мыши и установите значение:

1251

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. Нажмите «ОК», закройте окно редактора реестра и перезагрузите компьютер.

Способ 3: Подмена файлов

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

  1. Откройте проводник и пройдите по пути:

C:/Windows/System32

  1. Найдите файл:

C_1252.NLS

  1. Он используется для английского языка. Через правую кнопку заходим в «Свойства».

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. Во вкладке «Безопасность» выбираем кнопку «Дополнительно». Нам нужно дать вам полные права. В противном случае вы ничего с этим файлом не сделаете.

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. В строке «Владелец» жмем по ссылке «Изменить».

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. «Дополнительно».

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. Нажмите «Поиск». Ниже в списке кликните по той учетной записи, через которую вы сейчас сидите. Если у вас авторизация через учётку Microsoft, то указываем почту. Как только пользователь будет выбран, жмем «ОК».

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. В этом и следующем окне жмем на кнопку «ОК», чтобы применить параметры.

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. В окне «Свойства» нажмите «Изменить».

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. Выберите «Администраторов» и установите «Полный доступ». Применяем настройки и закрываем оба окошка.

Иероглифы вместо русских букв в Windows 10, 11, 7 и 8

  1. Теперь установите другой формат для файла (через ПКМ и команду «Переименовать»):

c_1252.NLS

  1. Например:

c_1252.txt

  1. На клавиатуре, зажмите Ctrl и, не отпуская, перетащите в любое место в папке файл:

c_1251.NLS

  1. Мы создали копию файла. Теперь оригинал NLS переименуйте в:

c_1252.NLS

  1. Перезагрузите систему.

В случае чего у вас есть оригинал c_1251.NLS и сам файл c_1252, у которого мы изменили формат.

Способ 4: Дополнительные советы

Если вы видите иероглифы вместо русских букв в Windows 10, 11, 7 или 8, то есть вероятность, что произошла более серьезная поломка в системных файлах. Поэтому вот ряд советов:

  • Если вы делали какие-то глобальные обновления в ОС, то попробуйте выполнить откат системы до самой ранней точки восстановления.
  • Если вы устанавливали какую-то кривую и стороннюю сборку Windows, то советую выполнить установку оригинальной версии «Окон».
  • Проверьте системные файлы на наличие ошибок.
  • Можно попробовать выполнить чистку системы.

На этом все, дорогие друзья. Пишите свои вопросы в комментариях. Всем добра и берегите себя.

Содержание

  • Исправляем отображение русских букв в Windows 10
    • Способ 1: Изменение языка системы
    • Способ 2: Редактирование кодовой страницы
  • Вопросы и ответы

Появились кракозябры вместо русских букв в Windows 10

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

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

Способ 1: Изменение языка системы

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

  1. Откройте меню «Пуск» и в строке поиска напечатайте «Панель управления». Кликните на отобразившийся результат, чтобы перейти к этому приложению.
  2. Открыть меню приложения Панель Управления через Пуск в Windows 10

  3. Среди присутствующих элементов отыщите «Региональные стандарты» и нажмите левой кнопкой мыши на этот значок.
  4. Перейти к настройке региональных стандартов в Windows 10

  5. Появится новое меню с несколькими вкладками. В данном случае вас интересует «Дополнительно», где нужно кликнуть на кнопку «Изменить язык системы…».
  6. Открыть дополнительные настройки региональных стандартов в Windows 10

  7. Убедитесь в том, что выбран пункт «Русский (Россия)», если это не так, то во всплывающем меню укажите его. Можем также порекомендовать активировать бета-версию Юникода — это также иногда сказывается на корректном отображении кириллицы. После всех правок нажмите на «ОК».
  8. Изменить текущий язык системы Windows 10

  9. Корректировки вступят в силу только после перезагрузки ПК, о чем вы и будете уведомлены при выходе из меню настроек.
  10. Перезагрузить компьютер после изменений Windows 10

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

Способ 2: Редактирование кодовой страницы

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

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

Подробнее: Инструкция по созданию точки восстановления Windows 10

  1. Нажатием на комбинацию клавиш Win + R запустите приложение «Выполнить», в строке напечатайте regedit и кликните на «ОК».
  2. В окне редактирования реестра находится множество директорий и параметров. Все они структурированы, а необходимая вам папка расположена по следующему пути:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls

  3. Выберите «CodePage» и опуститесь в самый низ, чтобы отыскать там имя «ACP». В столбце «Значение» вы увидите четыре цифры, в случае когда там выставлено не 1251, дважды кликните ЛКМ на строке.
  4. Найти строковый параметр в редакторе реестра Windows 10

  5. Двойное нажатие левой кнопкой мыши открывает окно изменения строковой настройки, где и требуется выставить значение 1251.
  6. Редактировать параметр ACP в реестре Windows 10

Если же значение и так уже является 1251, следует провести немного другие действия:

  1. В этой же папке «CodePage» поднимитесь вверх по списку и отыщите строковый параметр с названием «1252» Справа вы увидите, что его значение имеет вид с_1252.nls. Его нужно исправить, поставив вместо последней двойки единицу. Дважды кликните на строке.
  2. Найти 1252 в редакторе реестра Windows 10

  3. Откроется окно редактирования, в котором и выполните требуемую манипуляцию.
  4. Изменить значение 1252 в редакторе реестра Windows 10

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

Подмена кодовой страницы

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

  1. Откройте «Этот компьютер» и перейдите по пути C:\Windows\System32, отыщите в папке файл С_1252.NLS, кликните на нем правой кнопкой мыши и выберите «Свойства».
  2. Открыть свойства файла 1252 в Windows 10

  3. Переместитесь во вкладку «Безопасность» и найдите кнопку «Дополнительно».
  4. Перейти к дополнительным настройкам безопасности файлы 1252 в Windows 10

  5. Вам нужно установить имя владельца, для этого кликните на соответствующую ссылку вверху.
  6. Изменить владельца файла в Windows 10

  7. В пустом поле впишите имя активного пользователя, обладающего правами администратора, после чего нажмите на «ОК».
  8. Указать владельца файла Windows 10

    Читайте также: Управление правами учетной записи в Windows 10

  9. Вы снова попадете во вкладку «Безопасность», где требуется откорректировать параметры доступа администраторов.
  10. Перейти к редактированию доступа к файлу в Windows 10

  11. Выделите ЛКМ строку «Администраторы» и предоставьте им полный доступ, установив галочку напротив соответствующего пункта. По завершении не забудьте применить изменения.
  12. Предоставить полный доступ файлу в Windows 10

  13. Вернитесь в открытую ранее директорию и переименуйте отредактированный файл, поменяв его расширение с NLS, например, на TXT. Далее с зажатым CTRL потяните элемент «C_1251.NLS» вверх для создания его копии.
  14. Копирование файла 1251 в операционной системе Windows 10

  15. Нажмите на созданной копии правой кнопкой мыши и переименуйте объект в C_1252.NLS.
  16. Переименование копии файла 1251 Windows 10

Вот таким нехитрым образом происходит подмена кодовых страниц. Осталось только перезапустить ПК и убедиться в том, что метод оказался эффективным.

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

Читайте также: Изменение шрифта в Windows 10

Еще статьи по данной теме:

Помогла ли Вам статья?

Время на прочтение
9 мин

Количество просмотров 29K

Введение

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

В целом, локализация консоли Windows при наличии соответствующего языкового пакета не представляется сложной. Тем не менее, полное и однозначное решение этой проблемы, в сущности, до сих пор не найдено. Причина этого, главным образом, кроется в самой природе консоли, которая, являясь компонентом системы, реализованным статическим классом System.Console, предоставляет свои методы приложению через системные программы-оболочки, такие как командная строка или командный процессор (cmd.exe), PowerShell, Terminal и другие.
По сути, консоль находится под двойным управлением — приложения и оболочки, что является потенциально конфликтной ситуацией, в первую очередь в части использования кодировок.

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

Виды консолей

В общем случае функции консоли таковы:

  • управление операционной системой и системным окружением приложений на основе применения стандартных системных устройств ввода-вывода (экран и клавиатура), использования команд операционной системы и/или собственно консоли;

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

Основная консоль Windows — командная строка или иначе командный процессор (CMD). Большие возможности предоставляют оболочки PowerShell (PS), Windows PowerShell (WPS) и Terminal. По умолчанию Windows устанавливает Windows Power Shell мажорной версией до 5, однако предлагает перейти на новую версию — 7-ку, имеющую принципиальное отличие (вероятно, начинающееся с 6-ки) — кроссплатформенность. Terminal — также отдельно уставливаемое приложение, по сути интегратор всех ранее установленных оболочек PowerShell и командной строки.

Отдельным видом консоли можно считать консоль отладки Visual Studio (CMD-D).

Конфликт кодировок

Полностью локализованная консоль в идеале должна поддерживать все мыслимые и немыслимые кодировки приложений, включая свои собственные команды и команды Windows, меняя «на лету» кодовые страницы потоков ввода и вывода. Задача нетривиальная, а иногда и невозможная — кодовые страницы DOS (CP437, CP866) плохо совмещаются с кодовыми страницами Windows и Unicode.

История кодировок здесь: О кодировках и кодовых страницах / Хабр (habr.com)

Исторически кодовой страницей Windows является CP1251 (Windows-1251, ANSI, Windows-Cyr), уверенно вытесняемая 8-битной кодировкой Юникода CP65001 (UTF-8, Unicode Transformation Format), в которой выполняется большинство современных приложений, особенно кроссплатформенных. Между тем, в целях совместимости с устаревшими файловыми системами, именно в консоли Windows сохраняет базовые кодировки DOS — CP437 (DOSLatinUS, OEM) и русифицированную CP866 (AltDOS, OEM).

Совет 1. Выполнять разработку текстовых файлов (программных кодов, текстовых данных и др.) исключительно в кодировке UTF-8. Мир любит Юникод, а кроссплатформенность без него вообще невозможна.

Совет 2. Периодически проверять кодировку, например в текстовом редакторе Notepad++. Visual Studio может сбивать кодировку, особенно при редактировании за пределами VS.

Поскольку в консоли постоянно происходит передача управления от приложений к собственно командному процессору и обратно, регулярно возникает «конфликт кодировок», наглядно иллюстрируемый таблица 1 и 2, сформированных следующим образом:

Были запущены три консоли — CMD, PS и WPS. В каждой консоли менялась кодовая страница с помощью команды CHCP, выполнялась команда Echo c двуязычной строкой в качестве параметра (табл. 1), а затем в консоли запускалось тестовое приложение, исходные файлы которого были созданы в кодировке UTF-8 (CP65001): первая строка формируется и направляется в поток главным модулем, вторая вызывается им же, формируется в подключаемой библиотеке классов и направляется в поток опять главным модулем, третья строка полностью формируется и направляется в поток подключаемой библиотекой.

Команды и код приложения под катом

команды консоли:

  • > Echo ffffff фффффф // в командной строке

  • PS> Echo ffffff фффффф // в PowerShell

  • PS> Echo ffffff ?????? // так выглядит та же команда в Windows PowerShell

код тестового приложения:

using System;
using ova.common.logging.LogConsole;
using Microsoft.Extensions.Logging;
using ova.common.logging.LogConsole.Colors;

namespace LoggingConsole.Test
{
    partial class Program
    {
        static void Main2(string[] args)
        {
            ColorLevels.ColorsDictionaryCreate();
            Console.WriteLine("Hello World! Привет, мир!");     //вывод строки приветствия на двух языках
            LogConsole.Write("Лог из стартового проекта", LogLevel.Information);
            Console.WriteLine($"8. Active codepage: input {Console.InputEncoding.CodePage}, output {Console.OutputEncoding.CodePage}");
            Console.ReadKey();
        } 
    }
}

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

Табл. 1. Результат выполнения команды консоли Echo ffffff фффффф

Табл. 1. Результат выполнения команды консоли Echo ffffff фффффф

Вывод тестового приложения локализован лишь в 50% испытаний, как показано в табл.2.

Табл. 2. Результат запуска приложения LoggingConsole.Test

Табл. 2. Результат запуска приложения LoggingConsole.Test

Сoвет 3. Про PowerShell забываем раз и навсегда. Ну может не навсегда, а до следующей мажорной версии…

По умолчанию Windows устанавливает для консоли кодовые страницы DOS. Чаще всего CP437, иногда CP866. Актуальные версии командной строки cmd.exe способны локализовать приложения на основе русифицированной кодовой страницы 866, но не 437, отсюда и изначальный конфликт кодировок консоли и приложения. Поэтому

Совет 4. Перед запуском приложения необходимо проверить кодовую страницу консоли командой CHCP и ей же изменить кодировку на совместимую — 866, 1251, 65001.

Совет 5. Можно установить кодовую страницу консоли по умолчанию. Кратко: в разделе реестра \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor добавить или изменить значение параметра Autorun на: chcp <номер кодовой страницы>. Очень подробно здесь: Изменить кодовую страницу консоли Windows по умолчанию на UTF-8 (qastack.ru), оригинал на английском здесь: Change default code page of Windows console to UTF-8.

Проблемы консолей Visual Studio

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

Отдельной опцией Visual Studio является встроенная односеансная консоль отладки, которая перехватывает команду Visual Studio на запуск приложения, запускается сама, ожидает компиляцию приложения, запускает его и отдает ему управление. Таким образом, отладочная консоль в течение всего рабочего сеанса находится под управлением приложения и возможность использования команд Windows или самой консоли, включая команду CHCP, не предусмотрена. Более того, отладочная консоль не воспринимает кодовую страницу по умолчанию, определенную в реестре, и всегда запускается в кодировке 437 или 866.

Совет 6. Тестирование приложения целесообразно выполнять во внешних консолях, более дружелюбных к локализации.

Анализ проблем консолей был бы не полон без ответа на вопрос — можно ли запустить консольное приложение без консоли? Можно — любой файл «.exe» запустится двойным кликом, и даже откроется окно приложения. Однако консольное приложение, по крайней мере однопоточное, по двойному клику запустится, но консольный режим не поддержит — все консольные вводы-выводы будут проигнорированы, и приложение завершится

Локализация отладочной консоли Visual Studio

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

На самом деле, правильнее говорить о локализации приложения в консоли — это важное уточнение. Microsoft по этому поводу высказывается недвусмысленно: «Programs that you start after you assign a new code page use the new code page. However, programs (except Cmd.exe) that you started before assigning the new code page will continue to use the original code page». Иными словами, консоль можно локализовать когда угодно и как угодно, но приложение будет локализовано в момент стабилизации взаимодействия с консолью в соответствии с текущей локализацией консоли, и эта локализация сохранится до завершения работы приложения. В связи с этим возникает вопрос — в какой момент окончательно устанавливается связь консоли и приложения?

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

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

F:\LoggingConsole.Test\bin\Release\net5.0>chcp
Active code page: 1251

F:\LoggingConsole.Test\bin\Release\net5.0>loggingconsole.test
Codepages: current 1251:1251, setted 437:437, ΓΓεΣΦ∞ 5 ±Φ∞ΓεδεΓ ∩ε-≡≤±±ΩΦ: Θ÷≤Ωσ=Θ÷≤Ωσ
Codepages: current 437:437, setted 65001:65001,  5  -: =
Codepages: current 65001:65001, setted 1252:1252, ââîäèì 5 ñèìâîëîâ ïî-ðóññêè: éöóêå=éöóêå
Codepages: current 1252:1252, setted 1251:1251, вводим 5 символов по-русски: йцуке=йцуке
Codepages: current 1251:1251, setted 866:866, ттюфшь 5 ёшьтюыют яю-Ёєёёъш: щЎєъх=щЎєъх
Codepages: current 866:866, setted 1251:1251, вводим 5 символов по-русски: йцуке=йцуке
Codepages: current 1251:1251, setted 1252:1252, ââîäèì 5 ñèìâîëîâ ïî-ðóññêè: éöóêå=éöóêå

F:\LoggingConsole.Test\bin\Release\net5.0>chcp
Active code page: 1252
  • приложение запущено в консоли с кодовыми страницами 1251 (строка 2);

  • приложение меняет кодовые страницы консоли (current, setted);

  • приложение остановлено в консоли с кодовыми страницами 1252 (строка 11, setted);

  • по окончании работы приложения изменения консоли сохраняются (строка 14 — Active codepage 1252);

  • Приложение адекватно локализовано только в случае совпадения текущих кодовых страниц консоли (setted 1251:1251) с начальными кодовыми страницами (строки 8 и 10).

Код тестового приложения под катом

using System;
using System.Runtime.InteropServices;

namespace LoggingConsole.Test
{
    partial class Program
    {
        [DllImport("kernel32.dll")] static extern uint GetConsoleCP();
        [DllImport("kernel32.dll")] static extern bool SetConsoleCP(uint pagenum);
        [DllImport("kernel32.dll")] static extern uint GetConsoleOutputCP();
        [DllImport("kernel32.dll")] static extern bool SetConsoleOutputCP(uint pagenum);
        
        static void Main(string[] args)
        {
            Write(437);
            Write(65001);
            Write(1252);
            Write(1251);
            Write(866);
            Write(1251);
            Write(1252);
         }

        static internal void Write(uint WantedIn, uint WantedOut)
        {
            uint CurrentIn = GetConsoleCP();
            uint CurrentOut = GetConsoleOutputCP();
            Console.Write($"current {CurrentIn}:{CurrentOut} - текущая кодировка, "); /*wanted {WantedIn}:{WantedOut},*/
            SetConsoleCP(WantedIn);
            SetConsoleOutputCP(WantedOut);
            Console.Write($"setted {GetConsoleCP()}:{GetConsoleOutputCP()} - новая кодировка, ");
            Console.Write($"вводим 3 символа по-русски: ");
            string str = "" + Console.ReadKey().KeyChar.ToString();
            str += Console.ReadKey().KeyChar.ToString();
            str += Console.ReadKey().KeyChar.ToString();
            Console.WriteLine($"={str}");
        }
      
        static internal void Write(uint ChangeTo)
        {
            Write(ChangeTo, ChangeTo);
        }
    }
}

Программное управление кодировками консоли — это единственный способ гарантированной адекватной локализацией приложения в консоли. Языки .Net такой возможности не предоставляют, однако предоставляют функции WinAPI: SetConsoleCP(uint numcp) и SetConsoleOutputCP(uint numcp), где numcp — номер кодовой страницы потоков ввода и вывода соответственно. Подробнее здесь: Console Functions — Windows Console | Microsoft Docs. Пример применения консольных функций WInAPI можно посмотреть в тестовом приложении под катом выше.

Совет 7. Обязательный и повторный! Функции SetConsoleCP должны размещаться в коде до первого оператора ввода-вывода в консоль.

Стратегия локализации приложения в консоли

  1. Удалить приложение PowerShell (если установлено), сохранив Windows PowerShell;

  2. Установить в качестве кодовую страницу консоли по умолчанию CP65001 (utf-8 Unicode) или CP1251 (Windows-1251-Cyr), см. совет 5;

  3. Разработку приложений выполнять в кодировке utf-8 Unicode;

  4. Контролировать кодировку файлов исходных кодов, текстовых файлов данных, например с помощью Notepad++;

  5. Реализовать программное управление локализацией приложения в консоли, пример ниже под катом:

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

using System;
using System.Runtime.InteropServices;

namespace LoggingConsole.Test
{
    partial class Program
    {
      	static void Main(string[] args)
        {
          	[DllImport("kernel32.dll")] static extern bool SetConsoleCP(uint pagenum);
        		[DllImport("kernel32.dll")] static extern bool SetConsoleOutputCP(uint pagenum);
            SetConsoleCP(65001);        //установка кодовой страницы utf-8 (Unicode) для вводного потока
            SetConsoleOutputCP(65001);  //установка кодовой страницы utf-8 (Unicode) для выводного потока
 
            Console.WriteLine($"Hello, World!");
        }
    }
}

Спарсил один заказ, записываю в базу. Если записывать в базу как есть, то в базе будет: Оформлен

Пробовал переводить этот текст в декодере выводит: CP1252 → UTF-8 = Оформлен

В базу русский текст не записывается(нужно слово «Оформлен»), а пишутся каракули.

1) Пробую перекодировать:

$result=iconv('Windows-1252', 'utf8', "$text");

Результат тот же.
Вычитал в еще такой способ:

$res=iconv('Windows-1252', 'Windows-1251', "$text");
$res=iconv('Windows-1251', 'utf8', "$res");
return $res;

Результат пуст.

2) Пробую по-другому:

iconv('utf8', 'Windows-1251', "$text");

Результат: Îôîðìëåí
Смотрю что это за кодировка, результат:

Как нам пришлось помучиться
CP1252 → CP1251
получилось слово: Оформлен

То есть кодировка не меняется? Как сменить кодировку?

При работе с Windows 10 у пользователей иногда возникают проблемы с правильным отображением символов. Вместо привычных букв и цифр в тексте мы можем лицезреть какие-то замудрённые иероглифы или «кракозябры», которые не несут в себе никакого логического смысла. Чаще всего к этому приводят неправильно установленные значения в опциях региональных параметров.

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

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

  • Почему появляется эта проблема
  • Решаем проблему через системные настройки
  • Исправление проблемы через редактор реестра
  • Исправляем страницу кода вручную

Суть проблемы

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

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

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

Используем системные настройки для решения проблемы

Прежде всего, попробуем исправить ошибку через панель управления. Чтобы зайти в неё нажимаем ПКМ по кнопке-меню «Пуск» и в выпавшем списке выбираем соответствующий пункт.

Меню "Пуск" - Панель управления

В открывшемся новом окне находим раздел «Часы, язык, регион».

Панель управления - Часы, язык, регион

В новом разделе выбираем категорию региональных стандартов.

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

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

Переходим в раздел выбора языка, не поддерживающего Юникод, и далее выбираем опцию изменение языка системы.

Дополнительные региональные параметры

В списке выбираем нужный вариант (в нашем случае «Русский (Россия)» и нажимаем «ОК»)

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

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

ПК уйдёт в перезагрузку, после чего проблема с кракозябрами должна исчезнуть. Однако не всегда этот способ срабатывает. Если он не помог решить проблему, рассмотрим ещё один вариант, в котором нам придётся поработать с реестром.

Загрузка ... Загрузка …

Правим реестр для исправления непонятных букв

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

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper] «ARIAL»=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]

«Arial,0″=»Arial,204»

«Comic Sans MS,0″=»Comic Sans MS,204»

«Courier,0″=»Courier New,204»

«Courier,204″=»Courier New,204»

«MS Sans Serif,0″=»MS Sans Serif,204»

«Tahoma,0″=»Tahoma,204»

«Times New Roman,0″=»Times New Roman,204»

«Verdana,0″=»Verdana,204»

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

Загрузка ... Загрузка …

Редактируем страницу кода вручную

Страницы кода отвечают за сопоставление символов с байтами. Таких таблиц бывает много, и каждая из них работает с различными языками. Зачастую кракозябры появляются при неправильном выборе страницы и её сопоставлении. Чтобы исправить это, нам предстоит поработать с реестром. Для этого:

  1. Win+R запускаем системную службу «Выполнить». Прописываем в единственной строке regedit и жмём Ок.

Служба "Выполниить" - regedit

  1. В окне реестра нам нужно перейти по следующему пути: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls
  2. Здесь выбираем папку CodePage и в правой части окна идём вниз, чтобы найти пункт ACP.
  3. Дважды кликаем ЛКМ по ACP, и перед нами открывается окно изменений строковых настроек. Здесь выставляем значение 1251. Если такое значение уже установлено для этого пункта, тогда нужно сделать по-другому.

Загрузка ... Загрузка …

Редактор реестра - CodePage

Находясь в том же разделе CodePage, в правой части окна ищем пункт 1252. Жмём по нему дважды ЛКМ и в появившемся окне меняем текущее значение 1252 на 1251.

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

Загрузка ... Загрузка …

Post Views: 22 555

  • Windows 11 пропал пуск и панель задач
  • Windows 11 страница недоступна ваш системный администратор ограничил доступ
  • Windows 11 пробная версия как исправить
  • Windows 11 проводник контекстное меню
  • Windows 11 стоит ли ставить 2023