Скрыть объявление
примите участие
Столкнулся с проблемой отображения кракозябров в cmd в Windows 7. Как исправить надо.
chcp 866; chcp 1251; chcp 65001 – не помогали.
Оказывается надо в свойствах самого cmd выбрать шрифт Lucida Console!!!
Только так можно получить нормальный текст на русском языке.
Иногда по неизвестным причинам некоторые команды русскоязычной версии 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 шрифт Lucida Console (по умолчанию там стоит “Точечные шрифты”).
1
. Универсальный декодер – конвертер кириллицы
.
У пустого текстового файла кодировки быть не может в принципе.
txt вообще не хранит информацию о кодировке. Блокнот её подбирает анализом файла обычно.
Юникодные кодировки могут писать маркер BOM в начале файла, но это уже не будет пустой файл.
Как через cmd создать /не/пустой текстовый файл с кодировкой utf-8
Никак. Это невозможно.
Вы похоже не понимаете как происходит запись в файл.
Текстовый файл это обычный файл, и туда можно записать только единицы и нули. Компьютер работает только с ними. Никаких символов он не знает и не понимает.
Когда вы записываете символ в текстовый файл какой то программой она ищет в кодовой таблице с которой работает соответствующий код – последовательность единиц и нулей и записывает ее в файл.
И все.
Когда вы открываете этот файл – программа которая читает считывает последовательность единиц и нулей и ищет ей соответствие в кодовой таблице с которой она работает в данный момент.
Как через cmd создать пустой текстовый файл с кодировкой utf-8 (без подключения внешних утилит)?
Пустой текстовый файл по определению не имеет кодировки.
Как то так, d:\newfile.txt заменить на путь к файлу:
@echo -----BEGIN CERTIFICATE----- > %TEMP%\tmp64.txt
@echo 77u/YXNk >>%TEMP%\tmp64.txt
@echo -----END CERTIFICATE----- >>%TEMP%\tmp64.txt
certutil -decode %TEMP%\tmp64.txt %TEMP%\tmp.txt
copy %TEMP%\tmp.txt d:\newfile.txt
Скрыть объявление
примите участие
- По запросу в гугл выдает не так много вариантов, которые, как мне показалось, не совсем удобные. RuFix, CpFix – не дали своих результатов. Запуск сервера в Cp866 работает, но вот перекодировать каждый конфиг с русскими словами – геморрой.
Как по мне, самая удобная и распространенная кодировка для сервера – UTF-8.
Вспомнил, что cmd windows может работать в разных кодировках
Если у вас стоит Windows, а сервер работает на кодировке UTF-8, то все что вам нужно – вставить вот эту строку в батник запуска сервера, после первой строки.
chcp 65001
Нужно изменить шрифт на lucida console.
Для этого запустите cmd, нажмите alt+пробел,
теперь Свойства>>Шрифт
и меняете на lucida consoleТаким образом, при запуске сервера, консоль изменит свою кодировку с CP866 на UTF-8. После чего, проблем с отображением или написанием русских слов в консоли – не будет.
Последнее редактирование: 31 янв 2016
Starr
Активный участник
Пользователь
И поменять шрифт надо на lucida console
Насчет шрифтов не знаю, у меня со стандартным шрифтом все отлично работает
Последнее редактирование: 31 янв 2016
Starr
Активный участник
Пользователь
Starr
Активный участник
Пользователь
Там изначально стоит шрифт который поддерживает юникод.
А в 7-8.1 нужно менять на люсиду.
Patik1
Активный участник
Пользователь
- Баллы:
- 63
- Имя в Minecraft:
- Patik1
Для меня удобнее поставить BukkitGui, галку УТФ8 мода и енкодинг в утф8.
Starr
Активный участник
Пользователь
У каждого свои извращения.
Поделиться этой страницей
-
09.06.2020 -
79 886 -
181 -
178
В некоторых случаях, когда используется неверная кодировка, могут возникать так называемые кракозябры или иероглифы, т.е. не читаемые символы, которые невозможно разобрать при работе с командной строкой. Эти проблемы могут также возникать и при запуске различных BAT-файлов. В данной статье мы расскажем о том, как можно сменить шрифт или кодировку, чтобы избавиться от этой проблемы. Пример таких не читаемых символов можно видеть на картинке ниже:
Исправляем проблему с кодировкой с помощью смены шрифта
Первым делом нужно зайти в свойства окна: Правой кнопкой щелкнуть по верхней части окна -> Свойства
-> в открывшемся окне в поле Шрифт
выбрать Lucida Console
и нажать кнопку ОК
.
После этого не читаемые символы должны исчезнуть, а текст должен выводиться на русском языке.
Исправляем проблему с кодировкой с помощью смены кодировки
Вместо смены шрифта, можно сменить кодировку, которая используется при работе cmd.exe.
Узнать текущую кодировку можно введя в командной строке команду chcp
, после ввода данной команды необходимо нажать Enter
.
Как видно на скриншоте, текущая используемая кодировка Windows-1251
Для изменения кодировки нам необходимо воспользоваться командой chcp <код_новой_кодировки>
, где <код_новой_кодировки> – это сам код кодировки, на которую мы хотим переключиться. Возможные значения:
- 1251 – Windows-кодировка (Кириллица);
- 866 – DOS-кодировка;
- 65001 – Кодировка UTF-8;
Т.е. для смены кодировки на DOS, команда примет следующий вид:
chcp 866
Для смены кодировки на UTF-8, команда примет следующий вид:
chcp 65001
Для смены кодировки на Windows-1251, команда примет следующий вид:
chcp 1251
CMD/BAT: перекодировка текста dos866↔win1251
:
The gray Cardinal пишет:
Есть немало консольных утилит для перекодировки текста, но многие забывают про встроенные возможности.
Ещё до создания указанной темы я думал над решением этого вопроса теми же средствами и тоже дальше построчной обработки файлов пойти не смог. А хотелось бы обработать весь файл одним махом, что-то наподобие
chcp XXX
type in.txt>out.txt
Не обязательно совсем так просто: допускалась, например, необходимость нескольких вложенных вызовов CMD. EXE — главное, обойтись небольшим числом обращений к утилите CHCP. COM, а не дёргать её для каждой строки. К сожалению, мне ничего не удалось, хотя я по прежнему допускаю существование решения на этом пути.
Так что решение от 01MDM
имеет полное право на существование в Коллекции, хотя и не лишено недостатков, как неустранимых (FOR /F пропускает пустые строки; есть сложности со спецсимволами
вплоть до угрозы инъекции кода), так и устранимых, которые следовало бы убрать, подправив тему без создания новых сообщений (не помню, то ли не обрабатываются пробелы в начале строк, то ли непустые строки не содержащие ничего кроме пробелов). Но сейчас речь не об этом.
То что не получилось одним махом (командой TYPE) можно сделать двумя: перекодировкой исходного файла в промежуточный файл в UTF-16, а затем промежуточного — в файл в нужной кодировке. В качестве кодировок исходного и конечного файла могут быть любые однобайтные кодировки, а также UTF-8 без BOM. В основе такого решения лежит соединение вместе уже упоминавшихся
мною приёмов по перекодировке файлов в/из UTF-16 с помощью команды TYPE
.
Вот пример (без необходимых в полевых условиях проверок), раскрывающий эту мысль ( этот код содержит непечатные знаки, не копируйте его, а берите из присоединённого файла!
):
@echo off
set /p IN=Исходный файл:
set /p IN_CP=Его кодировка:
set /p OUT=Выходной файл:
set /p OUT_CP=Желаемая кодировка:
for /f "tokens=2 delims=:" %%i in ('chcp.com') do set CP=%%i
::в следующей строке выводятся байты \xFF\xFE (BOM):
set /p p= ?<nul >utf-16.tmp
(
chcp.com %IN_CP%>nul
cmd.exe /u /c type %IN%>>utf-16.tmp
chcp.com %OUT_CP%>nul
cmd.exe /c type utf-16.tmp>%OUT%
chcp.com %CP%>nul
)
del utf-16.tmp
Может возникнуть вопрос: зачем здесь несколько команд объединены круглыми скобками в одну составную?
Отвечаю: В качестве кодировки как входного так и выходного файлов могут выступать не только однобайтные кодировки, но и UTF-8 (кодовая страница 65001), а работа командных файлов при переключении на неё, по крайней мере в более ранних изданиях Windows, например в XP, имеет одну неприятную особенность — они тихо завершают работу на следующей же команде, но текущая (в том числе, составная) команда всё-таки выполняется и если в конце неё переключится обратно на однобайтную кодировку, то вылета не произойдёт. Но переключение кодировок в составной команде не влияет на входящие в неё внутренние команды обработчика, поэтому, чтобы воспользоваться её плодами, необходимо команду вызывать через новую копию CMD. EXE с ключом /C. Это одна из причин, по которой таким образом вызывается вторая TYPE, но, собственно говоря, её всё-равно следовало бы вызывать таким образом, если учесть исчезающе малую возможность, что командный файл вызван из CMD. EXE, уже запущенного с ключом /U.
Еще по поводу UTF-8: Если она используется во входном файле, то он не должен содержать BOM, иначе в начале выходного будет лишний символ и как его обрезать мне на ум не приходит. Если она используется для выходного файла, то он создаются без BOM, но это легко обойти тем же путем что и при создании промежуточного файла в UTF-16.
(Что-то похожее мною уже затрагивалось
.)
recode.zip
402 b, 43 downloads since 2013-06-24
You don’t have the permssions to download the attachments of this post.
If, by contrast, your concern is about the separate aspect of the limitations of Unicode character rendering
in console windows, see the middle and bottom sections of this answer
, where alternative console (terminal) applications are discussed too.
Предоставляет ли Microsoft улучшенную/полную альтернативу chcp 65001, которую можно сохранить навсегда без ручного изменения реестра?
Начиная с (как минимум) Windows 10
, версия 1903, у вас есть возможность установить языковой стандарт системы
( язык для программ, не поддерживающих Юникод
) в UTF-8
, но функция находится в бета-версии
на момент написания этой статьи
и имеет далеко идущие последствия
.
Чтобы активировать:
- Бежать
intl.cpl
(что открывает региональные настройки в Панели управления) - Следуйте инструкциям на скриншоте ниже.
Region > Administrative”>
Это устанавливает оба
активный OEM системы и
кодовая страница ANSI на65001
, кодовая страница UTF-8
, что поэтому (a) делает все будущие консольные окна
, которые используют OEM
кодовая страница, по умолчанию UTF-8 (как если быchcp 65001
был казнен вcmd.exe
г.
window) и (b) также создает устаревший, не-Unicode GUI
-подсистемные приложения, которые (среди прочих) используют ANSI
кодовая страница, используйте UTF-8.Если вы используете Windows PowerShell
, это также составитGet-Content
иSet-Content
и другие контексты, в которых Windows PowerShell по умолчанию использует активную кодовую страницу ANSI системы, в частности чтение исходного кода
из файлов без спецификации
, по умолчанию UTF-8
(который PowerShell Core
(v6+) всегда так). Это означает, что в отсутствие-Encoding
аргумент, файлы без BOM, которые закодированы в ANSI (что исторически распространено), будут затем неправильно считаны, а файлы, созданные с помощьюSet-Content
будет кодироваться UTF-8, а не ANSI.- Аналогично, устаревшее (не поддерживающее Unicode) неконсольное приложение
s будет неправильно интерпретировать файлы в кодировке ANSI
.
- Аналогично, устаревшее (не поддерживающее Unicode) неконсольное приложение
Выберите шрифт TT (TrueType), но даже они обычно поддерживают только подмножество
всех персонажей
, поэтому вам, возможно, придется поэкспериментировать с определенными шрифтами, чтобы увидеть, представлены ли все нужные вам символы – см. этот ответ
для получения подробной информации, в которой также обсуждаются альтернативные консольные (терминальные) приложения, которые имеют лучшую поддержку рендеринга Unicode.Ас ериксун
указывает, устаревшие консольные приложения, которые не «говорят» на UTF-8, будут ограничены вводом только в формате ASCII
и выдаст неправильный вывод
при попытке вывести символы за пределами (7-битного) диапазона ASCII
. (В устаревшей Windows 7 и ниже программы могут даже аварийно завершать работу
).Если вам важно запускать устаревшие консольные приложения, смотрите рекомендации eryksun в комментариях.
Однако для Windows PowerShell
, то есть не
достаточно
:- Необходимо дополнительно установить
$OutputEncoding
переменная предпочтения для UTF-8
а также:$OutputEncoding = [System.Text.UTF8Encoding]::new()
[2]
; проще всего добавить эту команду в свой$PROFILE
(только текущий пользователь) или$PROFILE.AllUsersCurrentHost
(все пользователи) файл. - К счастью, в PowerShell в этом больше нет необходимости Core
, который внутренне последовательно по умолчанию использует кодировку UTF-8 без спецификации.
- Необходимо дополнительно установить
При установке системной локали
в UTF-8 не
вариант в вашей среде, используйте команды запуска
вместо:
Примечание. Упомянутое выше предостережение относительно устаревших консольных приложений в равной степени применимо и здесь. Если вам важно запускать устаревшие консольные приложения, смотрите рекомендации eryksun в комментариях.
- Обратите внимание, что бег
chcp 65001
из внутрь
сеанс PowerShell не
эффективным, потому что . NET кэширует кодировку вывода консоли при запуске и не знает о более поздних изменениях, сделанных с помощьюchcp
; кроме того, как указано, Windows PowerShell
требуется$OutputEncoding
установить – см. этот ответ
для деталей.
- Обратите внимание, что бег
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
- Например, вот быстрый и грязный способ добавить эту строку в
$PROFILE
программно:
'$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding' + [Environment]::Newline + (Get-Content -Raw $PROFILE -ErrorAction SilentlyContinue) | Set-Content -Encoding utf8 $PROFILE
- Например, вы можете использовать PowerShell, чтобы создать для вас это значение:
# Auto-execute `chcp 65001` whenever the current user opens a `cmd.exe` console
# window (including when running a batch file):
Set-ItemProperty 'HKCU:\Software\Microsoft\Command Processor' AutoRun 'chcp 65001 >NUL'
Дополнительное чтение: Почему Windows PowerShell ISE
плохой выбор:
В то время как ISE имеет лучший рендеринг Unicode
поддержку, чем консоль, это вообще плохой выбор:
Прежде всего, ISE устарел
: не поддерживает PowerShell (Core) 7+
, на который будут направлены все будущие разработки, и он не является кросс-платформенным, в отличие от новой основной IDE для обоих выпусков PowerShell, Visual Studio Code
, который по умолчанию уже использует кодировку UTF-8 для PowerShell Core
и может быть настроен для Windows PowerShell.ISE обычно является средой для разработки
скрипты, а не для их запуска
в производстве (если вы пишете сценарии (также) для других, вы должны предполагать, что они будут запускаться в консоли
); в частности, относительно бегущего
код, поведение ISE не такое, как у обычной консоли
:Плохая поддержка запуска внешних программ
, не только из-за отсутствия поддержки интерактивных
(см. следующий пункт), но и в отношении:Неправильное отображение вывода stderr в виде ошибок PowerShell
: см. этот ответ
.
ИСЭ точечные источники
вызовы файлов сценариев вместо их запуска в дочерней области
(последнее происходит в обычном окне консоли); то есть повторяется
вызовы выполняются в той же области
. Это может привести к незаметным ошибкам, когда определения, оставленные предыдущим запуском, могут повлиять на последующие.
Проблема в том, что он скрывает консоль и перенаправляет вывод процесса (но не ввод) в канал. Большинство консольных приложений переключаются на полную буферизацию, когда файл является каналом. Кроме того, интерактивные приложения требуют чтения из стандартного ввода, что невозможно из скрытого окна консоли. ( Его можно открыть с помощью
ShowWindow
, но отдельное окно для ввода неуклюже.)
Если вы готовы жить с этим ограничением, переключите активную кодовую страницу на
65001
(UTF-8) для правильной связи с внешними программами требуется неудобный обходной путь:Вы должны сначала принудительно создать скрытое окно консоли, запустив любой
внешняя программа из встроенной консоли, например,chcp
– вы увидите кратковременное мигание окна консоли.
Спасшая статья
Приложение cmd.exe
– это командная строка или программная оболочка с текстовым интерфейсом (во загнул
).
Если Вы занялись проблемой кодировки шрифтов в
cmd.exe
, то как запустить командную структуру наверняка уже знаете
Перейдем собственно к проблеме: иногда вместо русской буквы при выполнении команды выходит набор непонятных символов ( рис.2
).
Теперь Вы получили нормальный текст на русском языке. Так же можно поменять текущую кодировку шрифта, для этой используемой команды chcp
. Набираем эту команду и жмем Войти
, в результате оценки текущей кодировки для командной строки – рис.4
.
Для изменения кодировки так же применим chcp в следующем формате:
Где
– это цифровой параметр нужного шрифта, например,
1251
– Окна (кириллица);
выбор на любой вкус. Т.о. что бы изменить кодировку на UTF-
8 нужна контрольная команда chcp 65001
.
[Теме три года – уходите] [Трижды решено] Шindows – командная строка с utf-8
Тема в разделе ” Оффтопик
“, создана пользователем Dereku
, 9 сен 2013
.
Страница 1 из 2
Страница 1 из 2
Поделиться этой страницей