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

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

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

12 ответов

Решение

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

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

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

  1. Идти к File -> Save As,

введите описание изображения здесь

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

введите описание изображения здесь

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

введите описание изображения здесь

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

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

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

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

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

Для кода Visual Studio сделайте следующее:

  1. Внизу справа выберите текущую кодировку
  2. Из вариантов выберите Сохранить с последующим
  3. Из вариантов выберите UTF-8

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

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

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

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

Чтобы выполнить расширенное сохранение файла .csproj, необходимо сначала выгрузить проект, щелкнув его правой кнопкой мыши и выбрав «Выгрузить проект». Это позволит вам сохранить файл .csproj в другой кодировке.

Рекомендуется, чтобы стандартная спецификация отсутствовала, но при использовании нескольких байтов, таких как [корейский или китайский], отображается предупреждающее сообщение, если в Visual Studio нет спецификации.

Фактически, я создал корейский массив String, и соответствующий массив String был сломан во время выполнения.

При использовании Visual Studio рекомендуется использовать UTF -8, включая BOM, в соответствии с предупреждающим сообщением MS. (при использовании многобайтовых символов)

Даже с решением Dave81 сообщество Visual Studio 2015 по-прежнему возвращало мой файл в UTF8-BOM каждый раз, когда я сохранял этот HTML-файл.

Когда я создал этот HTML-файл, я щелкнул правой кнопкой мыши по проекту и выбрал "Добавить", а затем добавил HTML-файл.

По умолчанию Visual Studio будет включать тег в ваш HTML-файл.

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

Кажется, Visual Studio анализирует ваш HTML-файл и, когда он видит этот тег, он конвертирует файл в UTF8-BOM без какого-либо рассмотрения в исходный формат файла (UTF8 без BOM).

** Я бы сделал комментарий прямо под решением Dave81, но у меня не было достаточно очков, чтобы сделать это...

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

Этот код создаст файл в UTF-8 без спецификации

Другие вопросы по тегам