Это не так <U+FEFF>, это <0xEF,0xBB,0xBF>спецификация файлов UTF8, поэтому вам следует изменить заголовок. Как бы вы хотели их удалить? Волшебными феями? С помощью инструмента командной строки? Редактируя по одному? Notepad ++ может изменять кодировку на UTF8 без спецификации. Например, просто поискав в Google 5 секунд "strip BOM utf8", я нашел это для Linux: ueber.net/who/mjl/projects/bomstrip
xanatos
1
Это может помочь вам получить ответ, который конкретно относится к вашей проблеме, если вы сообщите нам, какой инструмент javascript вы используете для сжатия, на какой платформе и какие другие инструменты являются частью вашего процесса сборки.
SingleNegationElimination
15
Спецификации в UTF-8 являются абсолютной грязью. Вам нужно найти производителя этого файла и попросить его вырезать @ # %%.
tchrist
4
@peterflynn: кодовая точка U+FEFFUnicode, используемая для спецификации, но сама спецификация - это то, как кодируется эта кодовая точка (UTF-8:, 0xEF 0xBB 0xBFUTF-16LE:, 0xFF 0xFEUTF-16BE: 0xFE 0xFFи т. д.). Таким образом, файлы, о которых идет речь, имеют кодировку UTF-8, которую компрессор обнаруживает при декодировании их в фактические кодовые точки Unicode.
Реми Лебо
4
@xanatos Независимо от того, что это такое, вот как это проявляется, и именно так люди могут легко найти этот вопрос с помощью поисковых систем.
Я предполагаю, что инструмент сломается, если в ваших файлах есть другой utf-8, но если нет, возможно, этот обходной путь может вам помочь. (Не проверено ...)
Изменить : добавлен -CSDпараметр в соответствии с комментарием Христа.
Вам нужно запустить с -CSDпереключателем или с PERL_UNICODEenvariable, установленным на SD, чтобы это работало.
tchrist
Regexp работает нормально для удаления символа <fffe> в начале строки, чтобы заменить все символы <fffe> в строке: 's / \ x {fffe} // g'.
Диего Пино
2
В Mac OSX мне пришлось изменить на: perl -CSD -pe 's/^\x{feff}//' file.csvобратите внимание на изменение с <fffe> на <feff>.
mpettis
1
@mpettis Значит, это не спецификация, а спецификация с перевернутыми байтами. Это может произойти на любой платформе, если вы конвертируете UTF-16 в UTF-8 и получите неправильный порядок байтов (хотя цель спецификации - предотвратить эту ошибку!)
Tripleee
1
@blong Что с этим? Задайте отдельный вопрос, если вы не можете понять это (но он, вероятно, будет отмечен как дубликат; первое
tripleee
185
Вы можете легко удалить их с помощью vim , вот шаги:
Другие источники предлагают добавить цифру 1 к шаблону, как в "sed '1 s / \ xEF \ xBB \ xBF //'", чтобы соответствовать только первой строке. Однако для меня в Mac OS X ни один из способов не работает.
Мариан
1
Это сработало и было для меня лучшим решением. Спасибо, сэр!
Вэнс Лукас
1
Очень понравилось это решение. Самый простой в реализации и при этом масштабируемый ... :)
Пико
1
@Marian Немного поздно, но вы можете проверить ответ Масума, который показывает, почему он не работал на Mac.
Кто-то по-прежнему использует вашу MS-DOS
1
Добавьте -i в sed, чтобы обновить файл (ы) с изменениями.
Johan
17
В 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, предназначенный для запуска из командной строки.
«Обратите внимание на $ после sed для Mac». - Спасибо, сэр!
Кто-то все еще использует вашу MS-DOS
1
Строка Bash "C-style" $'\xEF\xBB\xBF//'- это функция Bash, не особенно функция Mac или OSX. С помощью этой конструкции Bash проанализирует escape-последовательности на фактические байты перед передачей командной строки в sed. В зависимости от вашего sedварианта это может сработать, а может и не сработать (хотя я уверен, что пользователям OSX будет полезно знать, что для них это должно работать из коробки).
Команда 'file' показывает, присутствует ли спецификация:
Например: 'файл myfile.xml' отображает: «Документ XML 1.0, текст Unicode UTF-8 (со спецификацией), с очень длинными строками, с признаками конца строки CRLF»
<U+FEFF>
, это<0xEF,0xBB,0xBF>
спецификация файлов UTF8, поэтому вам следует изменить заголовок. Как бы вы хотели их удалить? Волшебными феями? С помощью инструмента командной строки? Редактируя по одному? Notepad ++ может изменять кодировку на UTF8 без спецификации. Например, просто поискав в Google 5 секунд "strip BOM utf8", я нашел это для Linux: ueber.net/who/mjl/projects/bomstripU+FEFF
Unicode, используемая для спецификации, но сама спецификация - это то, как кодируется эта кодовая точка (UTF-8:,0xEF 0xBB 0xBF
UTF-16LE:,0xFF 0xFE
UTF-16BE:0xFE 0xFF
и т. д.). Таким образом, файлы, о которых идет речь, имеют кодировку UTF-8, которую компрессор обнаруживает при декодировании их в фактические кодовые точки Unicode.Ответы:
Я предполагаю, что инструмент сломается, если в ваших файлах есть другой utf-8, но если нет, возможно, этот обходной путь может вам помочь. (Не проверено ...)
Изменить : добавлен
-CSD
параметр в соответствии с комментарием Христа.источник
-CSD
переключателем или сPERL_UNICODE
envariable, установленным наSD
, чтобы это работало.perl -CSD -pe 's/^\x{feff}//' file.csv
обратите внимание на изменение с <fffe> на <feff>.Вы можете легко удалить их с помощью vim , вот шаги:
1) В вашем терминале откройте файл с помощью vim:
2) Удалите все символы спецификации :
3) Сохраните файл:
источник
Другой способ удалить эти символы - с помощью Vim :
Теперь эти «скрытые» символы видны (
<feff>
) и могут быть удалены.источник
Спасибо за предыдущие ответы, на всякий случай вот вариант sed (1):
источник
В Unix / Linux:
На MacOSX
Обратите внимание на $ после 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
источник
Команда '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 }
Чтобы перезаписать настройки пакета по умолчанию, поместите файл сюда:
источник
Я предлагаю использовать инструмент "dos2unix", проверьте его, чтобы запустить
dos2unix ./thefile.js
.При необходимости попробуйте использовать что-то подобное для нескольких файлов:
Мое почтение.
источник
bomstrip
было нелегко получить на моем Mac, поэтому неfind . -type f -exec dos2unix '{}' +
Сохраните файл без подписи кода.
источник