Я сжимаю файлы JavaScript, и компрессор жалуется, что в моих файлах есть символы.
Как мне найти этих персонажей и удалить их?
Я сжимаю файлы JavaScript, и компрессор жалуется, что в моих файлах есть символы.
Как мне найти этих персонажей и удалить их?
U+FEFFUnicode, используемая для спецификации, но сама спецификация - это то, как кодируется эта кодовая точка (UTF-8:, 0xEF 0xBB 0xBFUTF-16LE:, 0xFF 0xFEUTF-16BE: 0xFE 0xFFи т. д.). Таким образом, файлы, о которых идет речь, имеют кодировку UTF-8, которую компрессор обнаруживает при декодировании их в фактические кодовые точки Unicode.
Ответы:
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
Я предполагаю, что инструмент сломается, если в ваших файлах есть другой utf-8, но если нет, возможно, этот обходной путь может вам помочь. (Не проверено ...)
Изменить : добавлен -CSDпараметр в соответствии с комментарием Христа.
-CSDпереключателем или с PERL_UNICODEenvariable, установленным на SD, чтобы это работало.
perl -CSD -pe 's/^\x{feff}//' file.csvобратите внимание на изменение с <fffe> на <feff>.
Вы можете легко удалить их с помощью vim , вот шаги:
1) В вашем терминале откройте файл с помощью vim:
vim file_name
2) Удалите все символы спецификации :
: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, не особенно функция Mac или OSX. С помощью этой конструкции Bash проанализирует escape-последовательности на фактические байты перед передачей командной строки в sed. В зависимости от вашего sedварианта это может сработать, а может и не сработать (хотя я уверен, что пользователям OSX будет полезно знать, что для них это должно работать из коробки).
Решение @ tripleee не сработало для меня. Но изменение кодировки файла на ASCII и снова на UTF-8 помогло :-)
Я использовал для этого vimgrep
:vim "[\uFEFF]" *
также обычная команда поиска vim
/[\uFEFF]
Команда 'file' показывает, присутствует ли спецификация:
Например: 'файл myfile.xml' отображает: «Документ XML 1.0, текст Unicode UTF-8 (со спецификацией), с очень длинными строками, с признаками конца строки CRLF»
dos2unix удалит спецификацию.
В Windows вы можете использовать встроенную утилиту перекодирования из 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 '{}' +
Сохраните файл без подписи кода.
<U+FEFF>, это<0xEF,0xBB,0xBF>спецификация файлов UTF8, поэтому вам следует изменить заголовок. Как бы вы хотели их удалить? Волшебными феями? С помощью инструмента командной строки? Редактируя по одному? Notepad ++ может изменять кодировку на UTF8 без спецификации. Например, просто поискав в Google 5 секунд "strip BOM utf8", я нашел это для Linux: ueber.net/who/mjl/projects/bomstrip