UTF-8 без BOM


180

У мене є файли javascript, які мені потрібні для збереження в UTF-8 (без BOM), кожен раз, коли я конвертую їх у потрібний формат у Блокноті ++ , вони повертаються назад до UTF-8 з BOM, коли я відкриваю їх у Visual Studio. Як я можу зупинити VS2010 від цього?

Інше питання, чи UTF-8 без підпису у Visual Studio такий же, як UTF-8 без BOM?


13
файл, збережений з (utf-8 без BOM), повертається до (utf-8 з BOM). У цьому проблема
kabaros


Вирішити проблему кабаросу просто - просто збережіть файл у візуальній студії за допомогою uft-8 без BOM. Так, це можливо - як Keavon зауважив, що "UTF-8 Без підпису знаходиться біля самої нижньої частини списку". Досить дивно, що utf-8 з підписом знаходиться на початку, а utf-8 без підпису - майже в кінці, але принаймні це вирішує цю фруструючу проблему.
cyriel

Відповіді:


227

BOM або Byte Order Mark іноді досить дратує. Visual Studio не змінює файл, якщо ви не збережете його (як сказав Ганс).

І ось вирішення вашої проблеми: Якщо ви хочете зберегти файл з іншими кодуваннями, виберіть зберегти як і продовжте кнопку збереження у діалоговому вікні файлу та виберіть "Зберегти за допомогою кодування". Або якщо ви хочете назавжди позбутися цього параметра, просто відкрийте меню Файл та виберіть "Розширені параметри збереження", і там слід вибрати "UTF-8 без підпису" (і це також відповіло на ваше останнє запитання :). Так, "UTF-8 без підпису" те саме, що і без BOM.


11
Мені було цікаво, чи є можливість включити це за замовчуванням для всіх файлів.
mihai

3
Файл збережено належним чином, коли я вибрав "Зберегти за допомогою кодування", але в меню Файл я не бачу "Розширені параметри збереження", незалежно від того, який файл я відкрив у редакторі. Гм ....
Кріс Джейнес

20
@ChrisJaynes клацніть правою кнопкою миші на панелі меню у відкритому місці, потім натисніть Налаштувати ... команди ... (*) меню: Файл ... [Додати команду] ... додати в "Розширені параметри збереження" справа над "Зберегти вибір"
Tracker1

4
Ну, у мене немає запису "UTF-8 без підпису" ... у чому тоді проблема?
Марко Кляйн

14
Примітка: UTF-8 Без підпису знаходиться в самому нижній частині списку.
Keavon

29

Тепер із картинками.

  1. Перейдіть до File-> Save As.

    Файл / Зберегти як

  2. Потім на кнопку "Зберегти" натисніть на трикутник і натисніть Save with Encoding....

    Збережіть за допомогою кодування

  3. Клацніть ОК, щоб перезаписати файл, а потім зі списку знайти кодування UTF-8 Without signature-> Клацніть OK.

    UTF-8 Без підпису

Сподіваюсь, це заощадить певний час.


26

Я створив розширення Encoding File Fix, яке не дозволяє Visual Studio 2010+ додавати BOM до файлів UTF-8.


1
Дякуємо за цей плагін! Існує інший спосіб визначення типів файлів, ніж використання регулярного вираження в налаштуваннях, що відповідають суфіксам файлу. Також плагін діє лише на файли, коли я їх зберігаю, коли я створюю javascript, спочатку він має BOM (додано 3 байти).
Андерс Лінден

6

На жаль, це не працює з файлами csproj. Немає "Розширеного варіанту збереження", і навіть якщо ви встановили його на "UTF-8 без підпису" для файлу CS, файли csproj все ще зберігаються з BOM. Якщо ви використовуєте VSS, він все ще скаржиться на файли проекту.


Можливо, вам слід перейти від VSS до SVN. Я пам’ятаю, що бачив інструмент, який може зробити перетворення для вас. SVN безкоштовний, і з невеликою ціною ви можете візуально плагін SVN перейти у вашу візуальну студію та використовувати SVN безпосередньо з інтерфейсу користувача.
Dave81

7
"Можливо, вам слід перейти з VSS до SVN." Що це за пропозиція? Більшість з нас, що працюють над корпоративним програмним забезпеченням, не отримують та вибирають нашу систему управління джерелами. SVN має у своєму розпорядженні випуски, саме те, що спонукало до створення git, оскільки вони набридли SVN.
Шива

4

UTF-8 - "Зберегти як" (без підпису) за замовчуванням - запит на включення за замовчуванням для UTF без підпису

VS 2017 спочатку підтримує EditorConfig, тому рекомендованим рішенням є додавання .editorconfigфайлу до вашої кодової бази та встановлення charset => utf-8. Потім, коли ви збережете файл, він буде збережений як UTF-8 без BOM.


Боюся, VS 2017 досі не підтримує charsetв .editorconfig github.com/editorconfig/editorconfig-visualstudio/isissue/…
BlazingFrog

2

Для vs2010 c ++ виникнуть проблеми з UTF8 без BOM, коли вихідні файли містять багатобайтові символи (наприклад, китайська).

Ці символи не будуть розпізнані правильно без BOM, і це призведе до невдалої компіляції.


тому що в Windows без BOM цей файл вважатиметься ANSI-кодуванням, тож він буде порушений
phuclv

2

Нещодавно я знайшов цей крихітний інструмент командного рядка, який додає або видаляє BOM у довільних файлах, кодованих UTF-8: UTF BOM Utils ( нове посилання на github)

Невеликий недолік, ви можете завантажити лише звичайний вихідний код C ++. Ви повинні створити makefile (наприклад, із CMake ) та скомпілювати його самостійно, бінарні файли на цій сторінці не надаються. Однак для розробника програмного забезпечення це не повинно бути жодним питанням.


1

Навіть з рішенням Dave81, спільнота Visual Studio 2015 все одно повертала мій файл до UTF8-BOM кожен раз, коли я зберігаю цей html-файл.

Коли я створив цей HTML-файл, я клацнув правою кнопкою миші на проект і вибрав "Додати", а потім додав HTML-файл.

За замовчуванням Visual studio включить <meta charset="utf-8" />тег у ваш HTML-файл.

Просто видалення тегу та застосування рішення Dave81 цього разу усунули проблему.

Здається, Visual Studio проаналізує ваш html-файл, і коли він побачить, що тег перетворює файл у UTF8-BOM без будь-якого врахування у вихідний формат файлу (UTF-8 без BOM).

Я б зробив коментар безпосередньо під рішенням Dave81, але мені не вистачило балів для цього ...


0

Для коду Visual Studio зробіть наступне:

  1. Знизу праворуч виберіть поточне кодування введіть тут опис зображення
  2. З опцій Виберіть Зберегти з додаванням введіть тут опис зображення
  3. З опцій виберіть UTF-8 введіть тут опис зображення

Код VS і VS дуже різняться. Це питання стосується VS
phuclv

хоча питання було для VS, і ви відповіли за VScode, який вирішив мою проблему, отже, підтримавши його
Ашу

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

Цей код створить файл в UTF-8 без BOM


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