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?


@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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.