Я пишу небольшое приложение на VB.net, которое позволит мне легко создать пользовательскую «учетную запись Windows 7» с паролем, вместо того, чтобы идти через панель управления. Проблема, с которой я столкнулся, заключается в том, что когда я создаю bat-файл в VB.net с использованием кодировки UTF-8, он не записывает, как это должно быть. Я перепробовал все кодировки, которые смог найти, но не смог заставить его работать.
Если у кого-то есть идея, почему я получаю это, пожалуйста, дайте мне знать. Спасибо заранее!
Ответы:
Edit: я был неправ;)
cmd.exe
действительно принимает UTF-8 , но вы должны быть уверены , чтобы сохранить его безBOM
в начале файла.Вот второй тест. Вы можете использовать
chcp 65001
в начале вашего пакетного файла.Пакетный файл не может быть типа UTF-8. Это должен быть ASCII.
Cmd.exe
просто не принимает другой формат. Я сделал небольшой тест, и вы можете использовать своих персонажей, но это требует некоторой работы.Сделайте файл
test.bat
сecho Å Ä Ö
. Сохраните его в форматеANSI/ASCII
. Откройтеcmd.exe
и убедитесь, что выcmd.exe
используетеLucida Console
(для отображения символов Unicode).Когда вы набираете файл, он будет отображать символы как старые DOS-символы. Вы можете увидеть таблицу перевода здесь .
При переключении на «Windows Ansi» - кодовая страница (т.е. западноевропейская латиница) с
chcp 1252
символами отображается корректно. Если они также будут переведены в их соответствующие утилиты, зависит от этой утилиты.Но почему вы создаете пакетный файл для этого? Вы не можете просто написать код на VB.net?
Изменить 2 #:
Это, как вы установите
Lucida Console
вcmd.exe
:Это
BOM
3 символа в начале файла UTF-8. (\xEF\xBB\xBF
).В VB.net вы можете создать файл без
BOM
, как это:источник
Lucida Console
и создание файла безBOM
(Edit # 2, внизу). Но работает ли создание этого пользователя черезnet user
командную строку? А что не работает, если вы создаете его через VB.net? Для этого нам понадобится пример кода (или отдельный вопрос), потому что это должно работать. (Кстати, вы связали мое изображение, а не ваше, я думаю, в вашем комментарии)find
, не слишком хорошо обрабатывает ввод UTF-8. Но вы можете использоватьfindstr
. Как это:ping 127.0.0.1 -n 2 | findstr /C:" = "
Для меня это исправило сохранение файла в формате UTF-8 без спецификации и использование этого кода.
То, что я раньше не использовал, было отключено @echo, так что с помощью chcp 65001 это было исправлено! Спасибо тоже Рик за помощь :)
источник