Dziwne znaki (´╗┐) na początku pliku wsadowego [duplikat]

30

Pracuję z plikami wsadowymi w systemie Windows, używając zarówno Notatnika, jak i Notatnika ++. Kiedy uruchamiam pliki wsadowe, które zaczynają się od @echo off, widzę pierwszy wiersz (przy uruchomieniu na dwóch osobnych maszynach) czytający ´╗┐@echo off, a następnie wszystkie wiersze REM poniżej.

Próbowałem zmienić kodowanie w Notepad ++, ale twierdzi, że są już w kodowaniu UTF-8, co wydaje się poprawne.

Co muszę zrobić, aby te pliki działały poprawnie?

Kanadyjczyk Luke REINSTATE MONICA
źródło
@luu moje pytanie dotyczy konkretnie notatnika ++
Kanadyjczyk Luke REINSTATE MONICA
Zwróć uwagę, że zwykły Notatnik podczas zapisywania w UTF8 nie pozwala zapisywać bez BOM i dodaje te znaki.
dmcontador

Odpowiedzi:

26

Wygląda jak kodowanie DOS ASCII Byte Order Mark dla UTF-8 (0xEF 0xBB 0xBF): http://en.wikipedia.org/wiki/Byte_order_mark

W Notepad ++ spróbuj zakodować go jako „UTF-8 bez BOM” lub jako zwykły ASCII. Myślę, że korzystanie z BOM dla UTF-8 jest odradzane z tego powodu, nie jest on dokładnie zgodny wstecz z ASCII.

Baochan
źródło
2
Zupełnie słuszne, z wyjątkiem tego, że „DOS ASCII” to strona kodowa DOS 850, jak pokazano eksperymentalnie w Pythonie:>>> print u'\ufeff'.encode('utf8').decode('cp850') ´╗┐
deltab
@deltab Ah, dobre znalezisko. Nie byłem pewien, jak dokładnie to kodowanie zostało nazwane, po prostu nie widziałem znaków graficznych ╗┐od czasów MS-DOS 5 / Windows 3.11. Współczesny system Windows musi uruchamiać pliki wsadowe z tym kodowaniem, aby zapewnić zgodność?
baochan
1
Natknąłem się na to, używając programu Visual Studio do utworzenia nowego pliku tekstowego.
Sam Goldberg,
9

Okazuje się, że do poprawnego działania należy ustawić kodowanie ANSI . Aby to ustawić, wybrałem Kodowanie -> Koduj w ANSI .

Aby to rozgryźć, próbowałem utworzyć plik wsadowy z wiersza polecenia.

echo @echo off > batch.bat
echo REM Some comment... >> batch.bat
echo echo Hello world! >> batch.bat

Następnie otworzyłem ten plik w Notepad ++ i sprawdziłem kodowanie w prawym dolnym rogu, które czytało ANSI jako UTF-8 . Nie wiem, dlaczego dodaje to ostatnie, ale wydaje się, że teraz działa.

Kanadyjczyk Luke REINSTATE MONICA
źródło
ANSI nie jest tak naprawdę kodowaniem. Przypuszczalnie odnosi się do domyślnej strony kodowej systemu Windows . Różni się to w zależności od konfiguracji.
Cody Gray
To nie jest poprawne. LM to artefakt kodowania zestawu znaków.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen Kto jest niepoprawny, ja czy Cody?
Kanadyjczyk Luke REINSTATE MONICA