UTF-8 bez BOM


180

Mam pliki javascript, których potrzebuję, aby je zapisać w UTF-8 (bez BOM), za każdym razem, gdy przekonwertuję je na właściwy format w Notepad ++ , są one przywracane z powrotem do UTF-8 z BOM, gdy otwieram je w Visual Studio. Jak mogę powstrzymać VS2010 przed zrobieniem tego?

Kolejne pytanie, czy UTF-8 bez podpisu w Visual Studio jest taki sam jak UTF-8 bez BOM?


13
plik zapisany z (utf-8 bez BOM) jest przywracany do (utf-8 z BOM) .. to jest problem
kabaros


Rozwiązanie problemu kabaros jest proste - wystarczy zapisać plik w Visual Studio za pomocą UFT-8 bez BOM. Tak, jest to możliwe - jak zauważył Keavon „UTF-8 Bez podpisu znajduje się na samym dole listy”. Całkiem dziwne, że utf-8 z podpisem jest na początku, a utf-8 bez podpisu jest prawie na końcu, ale przynajmniej rozwiązuje ten frustrujący problem.
cyriel,

Odpowiedzi:


227

BOM lub Byte Order Mark jest czasem dość irytujący. Visual Studio nie zmieni pliku, chyba że go zapiszesz (jak powiedział Hans).

A oto rozwiązanie twojego problemu: Jeśli chcesz zapisać plik z innymi kodowaniami, wybierz Zapisz jako i rozwiń przycisk Zapisz w oknie dialogowym pliku i wybierz „Zapisz z kodowaniem”. Lub jeśli chcesz pozbyć się tego ustawienia na stałe, po prostu otwórz menu Plik i wybierz „Zaawansowane opcje zapisywania” i tam powinieneś wybrać „UTF-8 bez podpisu” (i to również odpowiedziało na twoje ostatnie pytanie :). Tak „UTF-8 bez podpisu” jest taki sam jak bez BOM.


11
Zastanawiałem się, czy istnieje opcja domyślnego włączenia tej opcji dla wszystkich plików.
mihai

3
Zapisał plik poprawnie, gdy wybrałem „Zapisz z kodowaniem”, ale nie widzę „Zaawansowane opcje zapisu” w menu Plik, bez względu na to, jaki plik mam otwarty w edytorze. Hm ....
Chris Jaynes

20
@ChrisJaynes kliknij prawym przyciskiem myszy pasek menu, w otwartym miejscu, a następnie kliknij dostosuj ... polecenia ... (*) pasek menu: Plik ... [Dodaj polecenie] ... dodaj w „Zaawansowane opcje zapisu” tuż nad „Zapisz wybór”
Tracker1

4
Cóż, nie mam wpisu „UTF-8 bez podpisu” ... więc w czym problem?
Marco Klein,

14
Uwaga: UTF-8 Bez podpisu znajduje się na samym dole listy.
Keavon

29

Teraz ze zdjęciami.

  1. Idź do File-> Save As.

    Plik / Zapisz jako

  2. Następnie na przycisku Zapisz kliknij trójkąt i kliknij Save with Encoding....

    Oszczędzaj dzięki kodowaniu

  3. Kliknij ok, aby zastąpić plik, a następnie znajdź na liście kodowań UTF-8 Without signature-> Kliknij OK.

    UTF-8 Bez podpisu

Mam nadzieję, że to pozwoli Ci zaoszczędzić trochę czasu.


26

Utworzyłem rozszerzenie Fix File Encoding, które uniemożliwia Visual Studio 2010+ dodawanie BOM do plików UTF-8.


1
Dzięki za tę wtyczkę! Powinien istnieć inny sposób określania typów plików niż użycie wyrażenia regularnego w ustawieniach dopasowujących przyrostki plików. Ponadto wtyczka działa tylko na pliki, gdy je zapisuję, kiedy tworzę javascript, początkowo ma BOM (dodane 3 bajty).
Anders Lindén

6

Niestety nie działa to z plikami csproj. Nie ma „Zaawansowanej opcji zapisywania” i mimo że ustawiłeś ją na „UTF-8 bez podpisu” dla pliku cs, pliki csproj nadal są zapisywane z BOM. Jeśli używasz VSS, nadal narzeka na pliki projektu.


Może powinieneś przejść z VSS do SVN. Pamiętam narzędzie, które może dokonać konwersji za Ciebie. SVN jest bezpłatny, a za niewielką cenę możesz podłączyć wtyczkę SVN do swojego studia wizualnego i używać SVN bezpośrednio z interfejsu użytkownika.
Dave81

7
„Może powinieneś przejść z VSS do SVN.”. Co to za sugestia? Większość z nas pracujących nad oprogramowaniem dla przedsiębiorstw nie wybiera naszego Systemu Kontroli Źródeł. SVN ma problemy, które spowodowały utworzenie git, ponieważ mieli dość SVN.
Shiva,


2

W przypadku vs2010 c ++ wystąpią problemy z UTF8 bez BOM, gdy pliki źródłowe zawierają znaki wielobajtowe (np. Chiński).

Te znaki nie zostaną poprawnie rozpoznane bez BOM i spowodują nieudaną kompilację.


ponieważ w systemie Windows bez BOM zakłada się, że plik ma kodowanie ANSI, więc zostanie uszkodzony
phuclv,

2

Ostatnio znalazłem to małe narzędzie wiersza polecenia, które dodaje lub usuwa BOM w dowolnych plikach zakodowanych w UTF-8: UTF BOM Utils ( nowy link na github)

Mała wada, możesz pobrać tylko zwykły kod źródłowy C ++. Musisz utworzyć plik makefile ( na przykład z CMake ) i skompilować go samodzielnie, na tej stronie nie ma plików binarnych. Jednak dla programisty nie powinno to stanowić problemu.


1

Nawet przy rozwiązaniu Dave81 społeczność Visual Studio 2015 nadal przywracała mój plik do UTF8-BOM za każdym razem, gdy zapisuję ten plik HTML.

Kiedy utworzyłem ten plik HTML, kliknąłem projekt prawym przyciskiem myszy i wybrałem „Dodaj”, a następnie dodałem plik HTML.

Domyślnie Visual Studio dołącza <meta charset="utf-8" />znacznik do pliku HTML.

Po prostu usunięcie tagu, a następnie zastosowanie rozwiązania Dave81 sprawiło, że problem zniknął naprawdę tym razem.

Wygląda na to, że Visual Studio analizuje plik HTML i kiedy widzi ten znacznik, konwertuje plik na UTF8-BOM bez uwzględnienia oryginalnego formatu pliku (UTF-8 bez BOM).

Zrobiłbym komentarz bezpośrednio pod rozwiązaniem Dave81, ale nie miałem wystarczającej liczby punktów, aby to zrobić ...


0

W przypadku kodu Visual Studio wykonaj następujące czynności:

  1. W prawym dolnym rogu wybierz bieżące kodowanie wprowadź opis zdjęcia tutaj
  2. Z opcji wybierz Zapisz z kodowaniem wprowadź opis zdjęcia tutaj
  3. Z opcji wybierz UTF-8 wprowadź opis zdjęcia tutaj

Kod VS i VS są bardzo różne. To pytanie dotyczy VS
phuclv

choć pytanie dotyczyło VS, a ty odpowiedziałeś na VScode, który rozwiązał mój problem, dlatego poparłem go
Ashu

-2
UTF8Encoding utf8EmitBOM = new UTF8Encoding(false);
StreamWriter  sw = new StreamWriter(Path.Combine(sourcefilePath, fileName), false, utf8EmitBOM);

Ten kod utworzy plik w UTF-8 bez BOM


pytanie dotyczy kodowania podczas zapisywania pliku kodu źródłowego w IDE, a nie ustawiania kodowania podczas zapisywania pliku w kodzie C #
phuclv
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.