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 без подписи" такой же, как и без спецификации.
Теперь с картинками.
- Идти к
File
->Save As
,
- Затем на кнопку Сохранить нажмите на треугольник и нажмите
Save with Encoding..
,
- Нажмите кнопку ОК, чтобы перезаписать файл, затем из списка кодировок найдите
UTF-8 Without signature
-> НажмитеOK
,
Надеюсь, это сэкономит вам время.
Я создал расширение Fix File Encoding, которое не позволяет Visual Studio 2010+ добавлять спецификации в файлы UTF-8.
VS 2017 изначально поддерживает EditorConfig, поэтому рекомендуется добавить
.editorconfig
файл к вашей базе кода и установитьcharset => utf-8
, Затем, как только вы сохраните файл, он будет сохранен как UTF-8 без спецификации.
К сожалению, это не работает с файлами csproj. Отсутствует опция "Advanced save option", и даже если вы установили ее в "UTF-8 без подписи" для файла cs, файлы csproj по-прежнему сохраняются в спецификации. Если вы используете VSS, он по-прежнему жалуется на файлы проекта.
Для кода Visual Studio сделайте следующее:
Недавно я нашел этот крошечный инструмент командной строки, который добавляет или удаляет спецификацию для произвольных файлов в кодировке 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 без спецификации