16.11.2017, 07:19. Показов 4654. Ответов 6
Здравствуйте, всем доброго времени суток.
Подскажите, пожалуйста, как корректно прочитать текстовый файл в кодировке windows-1251 из UWP-приложения на C#?
Форматы UTF-8, Unicode, UTF-16, UTF32 прочитать можно «штатными» средствами, а вот win1251… видимо проигнорирован изначально.
P.S: можно было бы и вручную «перекодить» через тот-же блокнот, а по завершению — обратно, но идея приложения подразумевает работу с каталогами, содержащими множество текстовых файлов, и все в кодировке windows-1251. Также, иную кодировку, производственная программа, в которую после обработки отправляется файл, для дальнейшей «заливки» в приборы, не поддерживает и судя по всему не собирается в ближайшем, и далёком будущем.
Заранее благодарю за ответы и комментарии…
У меня есть сайт на 150000 файлов, всё было сделано очень давно и в кодировке cp-1251.
Сейчас пытаюсь открыть каталог в Атоме, Саблайме и ПхпШторме.
И вместо текста вижу только краказябры. И при сохранении всё переводится в белеберду.
По сути, я могу работать только в блокноте, но по файлу открывать не удобно.
А еще нужно, чтобы открывалась папка целиком и можно было искать среди файлов нужный текст.
Сейчас при краказябрах поиск на русском не пашет.
-
Вопрос задан
-
164 просмотра
При установке или использовании некоторых программ, а иногда и в интерфейсе системы некоторые пользователи могут столкнуться с тем, что вместо русских букв отображаются «кракозябры», «иероглифы», квадраты и знаки вопроса.
В этой инструкции подробно о том, как исправить отображение кириллицы в Windows 11 для конкретных программ или системы в целом.
Использование Юникод (UTF-8)
Прежде чем приступить, отмечу, что всё описанное ниже не относится к случаям, когда какой-то текстовый документ или сайт отображается неправильно. В этом случае причина, с большой вероятностью, в неверно определенной вашей программой для открытия файла или браузером кодировкой файла.
Для решения можно использовать текстовые редакторы с возможностью выбора кодировки (например, широкий набор поддерживаемых кодировок доступен в Sublime Text), расширения браузера для изменения кодировки или онлайн-сервисы для конвертации.
Если проблема с отображением кириллицы возникает в единичных программах, при этом речь идёт не о каком-то очень старом ПО, возможно, причина в настройках региональных стандартах, в частности, в функции использования символов Юникод (UTF-8). Для того, чтобы проверить, в этом ли дело, выполните следующие действия:
- Перейдите в Панель управления (можно использовать поиск на панели задач), откройте раздел «Региональные стандарты» и перейдите на вкладку «Дополнительно». Попасть на эту вкладку можно, с помощью клавиш Win+R и ввода команды
control intl.cpl,,1
- Нажмите кнопку «Изменить язык системы».
- Проверьте текущий язык системы (установите «Русский», если выбран другой) и состояние отметки «Использовать Юникод (UTF-8) для поддержки языка во всем мире». По умолчанию она снята. Если в вашем случае включена — попробуйте убрать и нажать «Ок», если же отключена, то наоборот.
Вам будет предложено перезагрузить компьютер — сделайте это, после чего проверьте, решилась ли проблема.
Кодовые страницы в реестре
В некоторых случаях, особенно когда ваша Windows 11 была русифицирована установкой языкового пакета (или у вас «сборка» на основе англоязычной версии системы), проблема с «иероглифами» может быть вызвана использованием не подходящих кодовых страниц.
Исправить ситуацию можно попробовать в реестре, однако предварительно я рекомендую создать точку восстановления системы.
Шаги будут следующими:
- Нажмите клавиши Win+R на клавиатуре, введите regedit и нажмите Enter
- Перейдите к разделу реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
- Обратите внимание на параметр с именем ACP в правой панели редактора реестра и его значение. Если оно отличается от 1251 (обычно при проблемах значение бывает равным 1252), дважды нажмите по параметру и измените значение на 1251. После чего закройте редактор реестра и перезагрузите компьютер.
Второй вариант того же действия (менее желательный) — подмена файла кодовой страницы C:\Windows\System32\c_1252.NLS копией файла c_1251.NLS (при этом желательно сохранить резервную копию файла c_1252.NLS). Файлы защищены и потребуется стать владельцем и получить необходимые права. Если при этом что-то пойдёт не так, может потребоваться выполнить восстановление системных файлов Windows.
Дополнительные варианты
Некоторые дополнительные возможные способы решения проблемы с отображением русских букв в программах и системных элементах Windows:
- Если вы изменяли системные шрифты Windows 11 на более «красивые» проблема может быть вызвана тем, что в выбранном вами шрифте отсутствуют необходимые символы кириллицы (обычно в этом случае отображаются пустые квадраты). Решение — тем же способом, которым вы проделывали это изначально, вернуть стандартный системный шрифт (также, при наличии, можно использовать точки восстановления системы).
- Для некоторых старых программ может сработать запуск в режиме совместимости с версией Windows, для которой они были разработаны.
Windows 10, 8.1 и Windows 7 позволяют отключить обязательную проверку цифровой подписи драйверов и установить неподписанный драйвер, однако если в последних версиях ОС это нужно сделать на постоянной основе, изменение опций с помощью bcdedit не помогает. Однако, может помочь самостоятельная подпись драйвера и его последующая установка, о чем и поговорим.
В этой инструкции подробно о том, как самостоятельно подписать драйвер для Windows 10, 8.1 или Windows 7 x64 или 32-бит (x86) для последующей установки в системе на постоянной основе без отключения проверки цифровой подписи драйверов, избежав при этом ошибок наподобие «INF стороннего производителя не содержит информации о подписи».
Что потребуется для подписи драйвера
Для того, чтобы выполнить все описанные далее шаги, скачайте и установите следующие инструменты с сайта Майкрософт:
- Microsoft Windows SDK for Windows 7 https://www.microsoft.com/en-us/download/details.aspx?id=8279
- Windows Driver Kit 7.1.0 https://www.microsoft.com/en-us/download/details.aspx?id=11800
Из первого набора достаточно будет установить Tools, из второго (представляет собой ISO-образ с установщиком, с которого нужно запустить KitSetup.exe) — выбрать Build Environments и Tools.
Обратите внимание: это не последние версии наборов инструментов, но они в равной степени подойдут для самостоятельной подписи драйверов для последующей установки во всех ОС от Windows 10 до Windows 7, при этом в инструкции не потребуется вдаваться в некоторые дополнительные нюансы.
Процесс самостоятельной подписи драйвера
В процессе для того, чтобы подписать драйвер самостоятельно, нам потребуется: создать сертификат, подписать драйвер этим сертификатом, установить сертификат в системе и установить драйвер. Начнем.
- Создайте в корне диска C какую-либо папку (так к ней проще будет обращаться в дальнейшем), например, C:\cert, где мы будем работать с сертификатами и драйверами.
- Запустите командную строку от имени администратора (нужны для 18-го шага). Далее используем следующие команды по порядку. Файлы драйвера пока не потребуются. Во время выполнения второй команды вас попросят ввести пароль, я использую password в окне запроса и далее в командах, вы можете использовать свой.
-
cd "C:\Program Files\Microsoft SDKs\Windows\v7.1\bin"
-
makecert -r -sv C:\cert\driver.pvk -n CN="remontka" C:\cert\driver.cer
-
cert2spc C:\cert\driver.cer C:\cert\driver.spc
-
pvk2pfx -pvk C:\cert\driver.pvk -pi password -spc C:\cert\driver.spc -pfx C:\cert\driver.pfx -po password
- До этого этапа всё должно пройти как на скриншоте ниже, командную строку не закрываем.
- В папке C:\cert создайте вложенную папку, например, drv и поместите туда свои файлы драйвера. Но: если вам требуется драйвер только для x64, не копируйте .inf файл для x86 систем в эту папку и наоборот.
В командной строке используем следующие команды:
-
cd C:\WinDDK\7600.16385.1\bin\selfsign\
-
inf2cat.exe /driver:"C:\cert\drv" /os:7_X64 /verbose
- В предыдущей команде для драйвера 32-бит укажите X86 вместо X64. Если будет предложено скачать .NET Framework, согласитесь, установите, а затем заново выполните команду. В идеале вы должны будете получить сообщение об успешном создании .cat файла для подписи. Однако, возможны ошибки, о наиболее частых — следующие два пункта. После исправления ошибок повторите команду из пункта 10.
- DriverVer set to incorrect date — возникает при дате в файле драйвера до 21 апреля 2009 года. Решение: откройте файл .inf из папки drv в текстовом редакторе (можно в блокноте) и в строке DriverVer установите другую дату (формат: месяц/день/год).
- Missing AMD64 CatalogFile entry (для 64-бит) или Missing 32-bit CatalogFile entry. Решение: откройте файл .inf из папки drv в текстовом редакторе и в разделе [Version] добавьте строку CatalogFile=catalog.cat
- В итоге вы должны получить сообщение: Catalog generation complete с указанием пути к файлу каталога, в моем случае – C:\cert\drv\catalog.cat. Далее используем следующие команды (требуется подключение к Интернету).
-
cd "C:\Program Files\Microsoft SDKs\Windows\v7.1\bin"
-
signtool sign /f C:\cert\driver.pfx /p password /t http://timestamp.verisign.com/scripts/timestamp.dll /v C:\cert\drv\catalog.cat
- Результат подписи файла драйвера без ошибок на скриншоте ниже. Следующий шаг — добавить самоподписанный сертификат в список доверенных в системе, сделать это можно следующими двумя командами по порядку
-
certmgr.exe -add C:\cert\driver.cer -s -r localMachine ROOT certmgr.exe -add C:\cert\driver.cer -s -r localMachine TRUSTEDPUBLISHER
- В результате вы должны получить сообщение «CertMgr Succeeded». Если Failed или certmgr.exe не является внутренней или внешней командой — убедитесь, что командная строка запущена от имени администратора, а вы находитесь в нужной папке (см. 15 шаг).
И вот теперь можно закрыть командную строку и установить драйвер из папки C:\cert\drv с помощью диспетчера устройств, или нажав правой кнопкой по .inf файлу и выбрав пункт «Установить». Потребуется подтвердить установку драйвера в окне «Не удалось проверить издателя этих драйверов» — нажать «Все равно установить этот драйвер».
Обратите внимание, что возможные ошибки в диспетчере устройств, отображаемые для устройства с самостоятельно подписанным драйвером обычно не имеют отношения непосредственно к процессу подписи (та же ошибка для них будет появляться и без подписи, при простом отключении проверки цифровой подписи драйверов в особых вариантах загрузки). Т.е. искать причину в этом случае нужно в чем-то ещё и читать подробную инструкцию по использованию драйвера (например, в случае драйверов для FlashTool).
Кракозябры в командной строке Windows
Добавил(а) microsin
Иногда по неизвестным причинам некоторые команды русскоязычной версии Windows выводят русский текст в нечитаемой кодировке, кракозябрами.
Например, команда help выводит нормальный текст:
Но при этом подсказка telnet выводит в ответ кракозябры.
Так может происходить, к примеру, если текущая кодировка консоли 866, а утилита telnet.exe почему-то выводит текст в кодировке 1251. Вывести текст в нужной кодировке поможет команда chcp, которая устанавливает нужную кодировку.
Вот так можно посмотреть текущую кодировку консоли:
c:\Documents and Settings\user>chcp Текущая кодовая страница: 866 c:\Documents and Settings\user>
А вот так можно поменять кодировку на 1251, после чего вывод подсказки telnet будет отображаться нормально:
c:\Documents and Settings\user>chcp 1251 Текущая кодовая страница: 1251 c:\Documents and Settings\user>
К сожалению, заранее угадать, в какой кодировке выводится текст, невозможно, поэтому проще попробовать установить командой chcp разные кодировки, чтобы добиться правильного отображения русского текста. Обычно используются кодировки 866 (кодировка русского текста DOS), 1251 (кодировка русского текста Windows), 65001 (UTF-8).
[Шрифт cmd.exe]
Иногда кракозябры можно убрать, если выбрать в свойствах окна cmd.exe шрифт Lucida Console (по умолчанию там стоит «Точечные шрифты»).
[Ссылки]
1. Универсальный декодер — конвертер кириллицы.