Яке кодування, щоб змусити працювати Å Ä Ö


12

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

Якщо хтось має уявлення про те, чому я отримую це, будь ласка, дайте мені знати. Дякуємо заздалегідь!


спробуйте опублікувати на 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. Відкрийте a cmd.exeі переконайтеся у cmd.exeвикористанні Lucida Console(для відображення символів Unicode).

При введенні файлу він відображатиме символи як старі DOS-символи. Діаграму перекладу можна переглянути тут .

При переході на "Windows Ansi" - кодова сторінка (тобто західноєвропейська латинська) з chcp 1252символами відображається правильно. Якщо вони також будуть передані у відповідні утиліти, залежить від цієї утиліти.

Але для чого ви створюєте для цього пакетний файл? Ви не можете просто зашифрувати це на VB.net?

cmd.exe


Редагувати 2 #:

Це, як ви встановите Lucida Consoleв cmd.exe:

Консоль Lucida


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

Привіт і дякую за відповідь. У моєму додатку vb.net я намагаюся створити .bat файл із командами: net user "username" net localgroup administratörer "type" / add Причина, що мені доводиться використовувати шведське слово adminstratörer замість адміністратора, тому що localgroup win не приймаю англійський переклад як групу.
kagstrom2100

Думаю, що пройти через .bat-файл було небагато, коли можна було це зробити прямо з VB.net. Як тут . Багато прикладів і в Google . Тому не потрібно створювати .bat як середнього чоловіка. І з цими прикладами ви можете подати Unicode-ім'я безпосередньо у функцію Windows. (Якщо вам не потрібно чомусь запускати .bat в інший час окремо від додатка VB.net?)
Рік

Ну, я шукав спосіб зробити це на VB.net в Google протягом днів, хоча я не знайшов жодного способу зробити це. Я вже спробував приклад, який ви пов’язали, і, здається, не вийшло. Як переконатися, що .bat файл не використовує BOM? Також що таке консоль Lucida? Єдина інформація, яку я міг знайти про це, це те, що це шрифт. Коли я спробую точну річ, яку ви зробили у другому прикладі / образі, я отримую це i.imgur.com/6sh20j0.jpg
kagstrom2100

Я додав до своєї відповіді включення Lucida Consoleта створення файлів без BOM(Правка №2, внизу). Але чи створює цього користувача за net userдопомогою командного рядка? А що не працює, якщо створити його через VB.net? Для цього нам знадобиться якийсь приклад-код (або окреме запитання), оскільки це має працювати. (До речі, ви пов’язали мій образ, а не ваш, я думаю, у вашому коментарі)
Рік

2
@JohnLBevan Так, ти маєш рацію. Мабуть, findне дуже добре справляється з входом UTF-8. Але можна використовувати findstr. Ось так:ping 127.0.0.1 -n 2 | findstr /C:" = "
Рік

2

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

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

Те, що я раніше не використовував, було @echo off, так що використання chcp 65001 - це те, що виправлено! Спасибі теж Рик за всю допомогу :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.