Какая кодировка, чтобы заставить работать на работу

12

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

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

kagstrom2100
источник
попробуйте опубликовать на stackoverflow.com и показать свой сценарий.
Тоби Аллен
1
@Toby Allen Ну, на самом деле это не вопрос программирования, а вопрос о кодировании текста, та же проблема возникает, когда я создаю .bat-файл «обычным» способом.
kagstrom2100

Ответы:

12

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?

cmd.exe


Изменить 2 #:

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

Lucida Console


Это BOM3 символа в начале файла 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
Rik
источник
Привет и спасибо за ответ. В моем приложении vb.net я пытаюсь создать файл .bat с помощью команд: net user "username" net localgroup administrator "тип" / add Причина, по которой я должен использовать шведское слово adminstratörer вместо администратора, заключается в том, что локальная группа выиграла не берите английский перевод как группу.
kagstrom2100
Просто подумал, что просмотр .bat-файла - это немного, когда вы можете сделать это прямо с VB.net. Like здесь . Много примеров в Google тоже. Так что нет необходимости создавать .bat как посредник. И с этими примерами вы можете передать имя Unicode непосредственно в функцию Windows. (Если по какой-то причине вам не нужно запускать .bat отдельно от вашего приложения VB.net?)
Рик
Ну, я искал способ сделать это в VB.net на Google в течение нескольких дней, хотя я не нашел никакого способа сделать это. Я уже попробовал пример, который вы связали, но он, похоже, не сработал. Как мне убедиться, что файл .bat не использует спецификацию? И что такое Lucida Console? Единственная информация, которую я смог найти, это то, что это шрифт. Когда я пытаюсь сделать то же самое, что вы сделали во втором примере / изображении, я получаю это i.imgur.com/6sh20j0.jpg
kagstrom2100
Я добавил в свой ответ, чтобы включить Lucida Consoleи создание файла без BOM(Edit # 2, внизу). Но работает ли создание этого пользователя через net userкомандную строку? А что не работает, если вы создаете его через VB.net? Для этого нам понадобится пример кода (или отдельный вопрос), потому что это должно работать. (Кстати, вы связали мое изображение, а не ваше, я думаю, в вашем комментарии)
Rik
2
@JohnLBevan Да, ты прав. Видимо find, не слишком хорошо обрабатывает ввод UTF-8. Но вы можете использовать findstr. Как это:ping 127.0.0.1 -n 2 | findstr /C:" = "
Рик
2

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

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

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

kagstrom2100
источник