Я роблю стиснення файлів 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
опцію, відповідно до коментаря christ.
-CSD
перемикач або з PERL_UNICODE
незмінним значенням 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
Зверніть увагу на $ after sed для mac.
У Windows
Існує Super Sed покращена версія sed. Для Windows це автономний файл .exe, призначений для запуску з командного рядка.
$'\xEF\xBB\xBF//'
Bash - це функція Bash, не особливо функція Mac або OSX. З цією конструкцією Bash проаналізує послідовності екранування на фактичні байти перед передачею командного рядка sed
. Залежно від вашого sed
варіанту, це може працювати, а може і не працювати (хоча я впевнений, що корисно для користувачів OSX знати, що це має працювати нестандартно для них).
Рішення @ tripleee для мене не спрацювало. Але зміна кодування файлу на ASCII і знову на UTF-8 зробила трюк :-)
Для цього я використовував vimgrep
:vim "[\uFEFF]" *
також звичайна команда пошуку vim
/[\uFEFF]
Команда 'файл' показує, якщо специфікація присутня:
Наприклад: "файл myfile.xml" відображає: "Документ XML 1.0, текст UTF-8 Unicode (зі специфікацією), з дуже довгими рядками, із закінчувачами рядків CRLF"
dos2unix видалить специфікацію.
У вікнах ви можете скористатися утилітою перекодувати заднім числом із 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 без специфікації. Наприклад, просто погугливши 5 секунд "strip BOM utf8", я знайшов це для Linux: ueber.net/who/mjl/projects/bomstrip