Удаление скрытых символов конца файла (BOM) в visual studio - PullRequest
6 голосов
/ 23 мая 2011

Я использую командный файл для объединения всех моих CSS-файлов

copy /b reset.css+action-plan.css+buttons.css+behaviours.css+footer.css+forms.css+header.css+home.css+layout.css+lightbox.css+print.css+questionnaire.css+typography.css+you-told-us.css main.css

Я уже делал это много раз в разных проектах, но в этом проекте используется .NET, и все файлы редактируются в Visual Studio.

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

 126  BLOCKQUOTE, Q   Lexical error at line 119, column 1.
 Encountered: "?" (63), after : "" ??? /**** left column ****/ 

Все отдельные CSS-файлы проверяются, и ошибки выдаются только в объединенный файл в те моменты, когда отдельные файлы объединяются.

Ответы [ 3 ]

8 голосов
/ 23 мая 2011

Проблема из-за метки порядка байтов (BOM) в ваших файлах. Метка порядка байтов предназначена для файлов Юникода, чтобы сообщить процессору порядок байтов. Подробнее об этом можно прочитать здесь:

http://en.wikipedia.org/wiki/Byte_order_mark

Проблема в том, что Visual Studio добавляет эти метки в ваш CSS-файл, и когда вы объединяете их путем конкатенации, спецификации заканчиваются в середине текста, что приводит в замешательство.

Когда вы переходите в диалоговое окно «Сохранить как», вы можете развернуть кнопку «Сохранить», чтобы увидеть опцию «Сохранить с кодированием». Это предложит вам другую кодировку, и я думаю, что один из параметров Unicode пропустит спецификацию (где-то в списке UTF-8 без подписи).

Я не знаю, как настроить Visual Studio для использования определенной кодировки по умолчанию.

Чтобы обойти проблемы, я создал программу для объединения файлов, которые будут соответствовать спецификации. Я использую это, а не копировать, или Unix Cat.

0 голосов
/ 19 февраля 2016

Я написал изящную маленькую программу командной строки , которая объединяет все файлы (например, css и т. Д.) В каталоге и удаляет BOM (метку порядка байтов) для вас. Он содержит около 5 строк кода и использует cssmin.js для обработки минификации за вас. Также есть пример того, как это выглядит в событии пост-сборки Visual Studio. Проверьте это

0 голосов
/ 23 мая 2011

Возможно, вы захотите использовать YUICompressor .NET вместо того, чтобы писать это самостоятельно.

...