Piszę małą aplikację na VB.net, która umożliwi mi łatwe utworzenie konta „Windows 7” za pomocą hasła, zamiast przechodzenia przez panel sterowania. Problem, który mam, polega na tym, że kiedy tworzę plik nietoperza w VB.net przy użyciu kodowania UTF-8, nie zapisuje on tak, jak powinien. Próbowałem już wszystkich kodowań, które mogę znaleźć, ale nie mogę go uruchomić.
Jeśli ktoś ma pomysł, dlaczego to dostaję, proszę dać mi znać. Z góry dziękuję!
Odpowiedzi:
Edit: myliłem się;)
cmd.exe
bierze UTF-8, ale trzeba mieć pewność, aby zapisać go bezBOM
na początku pliku.Oto drugi test. Możesz użyć
chcp 65001
na początku pliku wsadowego.Plik wsadowy nie może być typu UTF-8. To musi być ASCII.
Cmd.exe
po prostu nie akceptuje innego formatu. Zrobiłem mały test i możesz użyć swoich postaci, ale to wymaga trochę pracy.Utwórz plik za
test.bat
pomocąecho Å Ä Ö
. Zapisz w formacieANSI/ASCII
. Otwieraniecmd.exe
i upewnić się, żecmd.exe
zastosowanieLucida Console
(do wyświetlania znaków Unicode).Po wpisaniu pliku będą wyświetlane znaki jako stare znaki DOS. Można zobaczyć wykres tłumaczenie tutaj .
Po przejściu na „Windows Ansi” - strona kodowa (tzn. Łacińska Europa Zachodnia) ze
chcp 1252
znakami są wyświetlane poprawnie. To, czy zostaną przeniesione do odpowiednich narzędzi, zależy od tego narzędzia.Ale dlaczego tworzysz do tego plik wsadowy? Nie możesz tego po prostu zakodować w VB.net?
Edytuj 2 #:
W ten sposób można ustawić
Lucida Console
wcmd.exe
:Są
BOM
to 3 znaki na początku pliku UTF-8. (\xEF\xBB\xBF
).W VB.NET byłoby utworzyć plik bez
BOM
tak:źródło
Lucida Console
i tworzenie plików bezBOM
(Edytuj nr 2, na dole). Ale czy utworzenie tego użytkownika zanet user
pomocą wiersza polecenia? A co nie działa, jeśli utworzysz go za pośrednictwem VB.net? W tym celu potrzebowalibyśmy kodu przykładowego (lub osobnego pytania), ponieważ powinno to działać. (BTW połączyłeś mój obraz, a nie twój, jak sądzę, w swoim komentarzu)find
nie radzi sobie zbyt dobrze z wejściem UTF-8. Ale możesz użyćfindstr
. W ten sposób:ping 127.0.0.1 -n 2 | findstr /C:" = "
Tym, co naprawiło to dla mnie, było zapisanie pliku jako UTF-8 bez BOM i użycie tego kodu
To, czego wcześniej nie używałem, to wyłączenie @echo, więc naprawienie tego spowodowało użycie chcp 65001! Dziękuję też Rik za całą pomoc :)
źródło