UTF-8 без спецификации


180

У меня есть файлы javascript, которые необходимо сохранить в UTF-8 (без BOM), каждый раз, когда я конвертирую их в правильный формат в Notepad ++ , они возвращаются обратно в UTF-8 с BOM, когда я открываю их в Visual Studio. Как я могу остановить VS2010 от этого?

Другой вопрос, является ли UTF-8 без подписи в Visual Studio таким же, как UTF-8 без спецификации?


13
файл, сохраненный с (UTF-8 без BOM), возвращается (UTF-8 с BOM) .. это проблема
kabaros


Решение проблемы с Kabaros простое - просто сохраните файл в Visual Studio, используя UFT-8 без спецификации. Да, это возможно - как заметил Кивон, «UTF-8 без подписи находится в самом низу списка». Довольно странно, что utf-8 с подписью находится в начале, а utf-8 без подписи - почти в конце, но, по крайней мере, это решает эту неприятную проблему.
cyriel

Ответы:


227

BOM или Byte Order Mark иногда раздражают. Visual Studio не изменяет файл, пока вы не сохраните его (как сказал Ганс).

И вот решение вашей проблемы: если вы хотите сохранить файл с другими кодировками, выберите «Сохранить как», нажмите кнопку «Сохранить» в диалоговом окне «Файл» и выберите «Сохранить с кодировкой». Или, если вы хотите навсегда избавиться от этой настройки, просто откройте меню «Файл» и выберите «Дополнительные параметры сохранения», и там вы должны выбрать «UTF-8 без подписи» (и это также ответило на ваш последний вопрос :). Да, «UTF-8 без подписи» такой же, как и без спецификации.


11
Мне было интересно, если есть возможность включить это по умолчанию для всех файлов.
Михай

3
Он правильно сохранил файл, когда я выбрал «Сохранить с кодировкой», но я не вижу «Дополнительные параметры сохранения» в меню «Файл», независимо от того, какой файл я открыл в редакторе. Хм ....
Крис Джейнс

20
@ChrisJaynes щелкните правой кнопкой мыши по строке меню, в открытом месте, затем выберите "настроить ... команды ... (*) menubar: Файл ... [Добавить команду] ... добавить в" Дополнительные параметры сохранения ", которые я поставил это прямо над «Сохранить
выделение

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

14
Примечание: UTF-8 без подписи находится в самом низу списка.
Кивон

29

Теперь с картинками.

  1. Перейти к File-> Save As.

    Файл / Сохранить как

  2. Затем на кнопку Сохранить нажмите на треугольник и нажмите Save with Encoding....

    Сохранить с кодировкой

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

    UTF-8 без подписи

Надеюсь, это сэкономит вам время.


26

Я создал расширение Fix File Encoding, которое не позволяет Visual Studio 2010+ добавлять спецификации в файлы UTF-8.


1
Спасибо за этот плагин! Должен быть какой-то другой способ указания типов файлов, чем использование регулярного выражения в суффиксах файлов соответствия параметров. Кроме того, плагин действует только на файлы, когда я их сохраняю, когда я создаю javascript, у него изначально есть спецификация (добавлено 3 байта).
Андерс Линден

6

К сожалению, это не работает с файлами csproj. Отсутствует опция «Advanced save option», и даже если вы установили ее в «UTF-8 без подписи» для файла cs, файлы csproj по-прежнему сохраняются в спецификации. Если вы используете VSS, он по-прежнему жалуется на файлы проекта.


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

7
«Возможно, вам стоит перейти с VSS на SVN». Что это за предложение? Большинство из нас, работающих над корпоративным программным обеспечением, не могут выбирать нашу Систему контроля версий. У SVN есть свои проблемы, которые и вызвали создание git, потому что они были сыты по горло SVN.
Шива

4

UTF-8 - «Сохранить как» (без подписи) По умолчанию - Запрос на включение значения по умолчанию для UTF без подписи

VS 2017 изначально поддерживает EditorConfig, поэтому рекомендуется добавить .editorconfigфайл в базу кода и установить его charset => utf-8. Затем, как только вы сохраните файл, он будет сохранен как UTF-8 без спецификации.


Боюсь, что VS 2017 до сих пор не поддерживается charsetв .editorconfig github.com/editorconfig/editorconfig-visualstudio/issues/…
BlazingFrog

2

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

Эти символы не будут распознаны правильно без спецификации, что приведет к неудачной компиляции.


потому что в Windows без спецификации предполагается, что файл будет иметь кодировку ANSI, поэтому он будет поврежден
phuclv

2

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

Небольшой недостаток, вы можете скачать только простой исходный код C ++. Вы должны создать make-файл (например, с 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 без спецификации


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