11

Я пишу небольшое приложение на VB.net, которое позволит мне легко создать пользовательскую "учетную запись Windows 7" с паролем, вместо того, чтобы идти через панель управления. Проблема, с которой я столкнулся, заключается в том, что когда я создаю bat-файл на VB.net с использованием кодировки UTF-8, он пишет не так, как предполагается. Я перепробовал все кодировки, которые смог найти, но не смог заставить его работать.

Если у кого-то есть идея, почему я получаю это, пожалуйста, дайте мне знать. Спасибо заранее!

2 ответа2

9

Редактировать: я был не прав;)
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?

cmd.exe


Изменить 2 #:

Вот как вы устанавливаете Lucida Console в cmd.exe:

Lucida Console


BOM состоит из 3 символов в начале файла UTF-8. (\xEF\xBB\xBF).
В VB.net вы бы создали файл без BOM например:

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using
2

Для меня это исправило то, что я сохранил файл как UTF-8 без спецификации и использовал этот код.

@echo off
chcp 65001
net user Linus /add
net localgroup Administratörer Test/add

То, что я раньше не использовал, было отключено @echo, так что с помощью chcp 65001 это было исправлено! Большое спасибо Рик за помощь :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .