Я сжимаю файлы JavaScript, и компрессор жалуется, что в моих файлах есть 
символы.
Как мне найти этих персонажей и удалить их?
Я сжимаю файлы JavaScript, и компрессор жалуется, что в моих файлах есть 
символы.
Как мне найти этих персонажей и удалить их?
U+FEFF
Unicode, используемая для спецификации, но сама спецификация - это то, как кодируется эта кодовая точка (UTF-8:, 0xEF 0xBB 0xBF
UTF-16LE:, 0xFF 0xFE
UTF-16BE: 0xFE 0xFF
и т. д.). Таким образом, файлы, о которых идет речь, имеют кодировку UTF-8, которую компрессор обнаруживает при декодировании их в фактические кодовые точки Unicode.
Ответы:
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
Я предполагаю, что инструмент сломается, если в ваших файлах есть другой utf-8, но если нет, возможно, этот обходной путь может вам помочь. (Не проверено ...)
Изменить : добавлен -CSD
параметр в соответствии с комментарием Христа.
-CSD
переключателем или с PERL_UNICODE
envariable, установленным на 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