Я сжимаю файлы JavaScript, и компрессор жалуется, что в моих файлах есть символ 
.
Как я могу найти эти символы и удалить их?
Я сжимаю файлы JavaScript, и компрессор жалуется, что в моих файлах есть символ 
.
Как я могу найти эти символы и удалить их?
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
Я предполагаю, что инструмент сломается, если в ваших файлах есть другие utf-8, но если нет, возможно, этот обходной путь может вам помочь. (Не проверено...)
Изменить: добавлена опция -CSD
согласно комментарию tchrist.
-CSD
или с переменной PERL_UNICODE
, установленной на SD
, чтобы это сработало.
- person tchrist; 04.09.2011
perl -CSD -pe 's/^\x{feff}//' file.csv
, обратите внимание на изменение с ‹fffe› на ‹feff›.
- person mpettis; 06.02.2014
Вы можете легко удалить их с помощью vim, вот шаги:
1) В терминале откройте файл с помощью vim:
vim file_name
2) Удалите все символы BOM:
:set nobomb
3) Сохраните файл:
:wq
Другой способ удалить эти символы — с помощью Vim:
vim -b имя_файла
Теперь эти «скрытые» символы видны (<feff>
) и могут быть удалены.
Спасибо за предыдущие ответы, вот вариант sed(1) на всякий случай:
sed '1s/^\xEF\xBB\xBF//'
В Unix/Linux:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
В MacOSX
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Обратите внимание на $ после sed для mac.
В Windows
Существует Super Sed, расширенная версия sed. Для Windows это автономный .exe, предназначенный для запуска из командной строки.
$'\xEF\xBB\xBF//'
в стиле Bash C — это функция Bash, а не функция Mac или OSX. С этой конструкцией Bash будет анализировать escape-последовательности в фактические байты перед передачей командной строки в sed
. В зависимости от вашего варианта sed
это может работать или не работать (хотя я уверен, что пользователям OSX полезно знать, что для них это должно работать из коробки).
- person tripleee; 14.07.2015
Использование tail может быть проще:
tail --bytes=+4 filename > new_filename
Решение @tripleee мне не помогло. Но смена кодировки файла на ASCII и снова на UTF-8 сделала свое дело :-)
Я использовал vimgrep для этого
:vim "[\uFEFF]" *
также обычная команда поиска vim
/[\uFEFF]
Команда «файл» показывает, присутствует ли спецификация:
Например: «file myfile.xml» отображает: «Документ XML 1.0, текст UTF-8 Unicode (с спецификацией), с очень длинными строками, с разделителями строк CRLF»
dos2unix удалит спецификацию.
В Windows вы можете использовать бэкпортированную утилиту recode из UnxUtils а>.
В Sublime Text вы можете установить Пакет Highlighter, а затем настройте регулярное выражение в настройках пользователя.
Здесь я добавил \uFEFF
в конец свойства highlighter_regex
.
{
"highlighter_enabled": true,
"highlighter_regex": "(\t+ +)|( +\t+)|[\u2026\u2018\u2019\u201c\u201d\u2013\u2014\uFEFF]|[\t ]+$",
"highlighter_scope_name": "invalid",
"highlighter_max_file_size": 1048576,
"highlighter_delay": 3000
}
Чтобы перезаписать настройки пакета по умолчанию, поместите файл сюда:
~/.config/sublime-text-3/Packages/User/highlighter.sublime-settings
Я предлагаю использовать инструмент "dos2unix", проверьте запуск dos2unix ./thefile.js
.
При необходимости попробуйте использовать что-то подобное для нескольких файлов:
for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done
Мое почтение.
bomstrip
не был легко доступен на моем Mac, поэтому нашел время, чтобы дать вам простую версию: find . -type f -exec dos2unix '{}' +
- person dsz; 05.03.2020
Сохраните файл без подписи кода.
<U+FEFF>
, это<0xEF,0xBB,0xBF>
, это спецификация файлов UTF8, поэтому вам следует изменить заголовок. Как бы вы хотели их удалить? Волшебными феями? Инструментом командной строки? Редактируя один за другим? Notepad++ может изменить кодировку на UTF8 без спецификации. Например, просто погуглив 5 секунд полосы BOM utf8, я нашел это для Linux: ueber .net/who/mjl/projects/bomstrip - person xanatos   schedule 04.09.2011<U+FEFF>
является спецификацией UTF-16. Поскольку JavaScript представляет строки способом, подобным UTF-16 (UCS-2), я считаю, что спецификация UTF-8 может оказаться похожей на спецификацию UTF-16 при обработке файла с помощью инструментов на основе JavaScript (например, инструменты разработки браузера / Инспектор узлов или в JS API, напримерString.charCodeAt()
). Это могло бы объяснить то, что видел @QuintinPar. - person peterflynn   schedule 30.01.2015U+FEFF
— это кодовая точка Unicode, используемая для спецификации, но сама спецификация — это то, как кодируется эта кодовая точка (UTF-8:0xEF 0xBB 0xBF
, UTF-16LE:0xFF 0xFE
, UTF-16BE:0xFE 0xFF
и т. д.). Таким образом, рассматриваемые файлы имеют кодировку UTF-8, которую компрессор обнаруживает при декодировании их в фактические кодовые точки Unicode. - person Remy Lebeau   schedule 19.06.2015grep $'\xEF\xBB\xBF' *.*
- person rubo77   schedule 15.06.2020