Isso não é <U+FEFF>, esse é <0xEF,0xBB,0xBF>o BOM dos arquivos UTF8, então você deve alterar o título. Como você gostaria de removê-los? Por fadas mágicas? Por ferramenta de linha de comando? Editando um por um? O Notepad ++ pode alterar a codificação para UTF8 sem BOM. Por exemplo, pesquisando no Google 5 segundos de "strip BOM utf8", encontrei isso para Linux: ueber.net/who/mjl/projects/bomstrip
xanatos
1
Pode ajudá-lo a obter uma resposta que se relaciona especificamente ao seu problema se você nos disser qual ferramenta javascript está usando para fazer a compactação, em qual plataforma e quais outras ferramentas fazem parte do seu processo de criação.
SingleNegationElimination
15
BOMs em UTF-8 são absolutamente crus. Você precisa encontrar o produtor desse arquivo e dizer a ele para cortá-lo @ # %%.
tchrist,
4
@peterflynn: U+FEFFé o ponto de código Unicode usado para um BOM, mas o próprio BOM é como esse ponto de código é codificado (UTF-8 0xEF 0xBB 0xBF:, UTF-16LE:, 0xFF 0xFEUTF-16BE:, 0xFE 0xFFetc). Portanto, os arquivos em questão são codificados em UTF-8, que o compressor detecta ao decodificá-los para pontos de código Unicode reais.
Remy Lebeau
4
@xanatos Independentemente do que seja, é assim que se manifesta, e é assim que as pessoas podem encontrar facilmente essa questão usando os motores de busca.
Eu presumo que a ferramenta falhará se você tiver outro utf-8 em seus arquivos, mas se não tiver, talvez esta solução alternativa possa ajudá-lo. (Não testado ...)
Editar : adicionada a -CSDopção, conforme comentário do cristão.
Você precisa executar com o -CSDswitch, ou com o PERL_UNICODEenvariable definido como SD, para que funcione.
tchrist,
Regexp funciona bem para remover o caractere <fffe> no início de uma linha, para substituir todos os caracteres <fffe> em uma linha: 's / \ x {fffe} // g'.
Diego Pino
2
No Mac OSX, tive que mudar para perl -CSD -pe 's/^\x{feff}//' file.csv:, observe a mudança de <fffe> para <feff>.
mpettis de
1
@mpettis Isso não é um BOM então, mas um BOM com os bytes invertidos. Pode acontecer em qualquer plataforma, se você converter UTF-16 em UTF-8 e obter a ordem de bytes errada (mesmo que o objetivo do BOM seja evitar esse erro!)
tripleee
1
@blong O que tem? Faça uma pergunta separada se você não conseguir descobrir (mas provavelmente será marcada como uma duplicata; primeiro hit do google stackoverflow.com/questions/1712188/… )
tripleee
185
Você pode removê-los facilmente usando o vim . Aqui estão as etapas:
Outras fontes sugerem acrescentar a figura 1 ao padrão, como em "sed '1 s / \ xEF \ xBB \ xBF //'", para coincidir apenas com a primeira linha. No entanto, para mim no Mac OS X, nenhuma maneira funciona.
Marian,
1
Isso funcionou e foi a melhor solução para mim. Obrigado, senhor!
Vance Lucas de
1
Adorei essa solução. Mais fácil de implementar e ainda escalável ... :)
Piko
1
@Marian Um pouco tarde, mas você pode verificar a resposta de Masum que mostra por que não funcionou no mac.
Alguém ainda usa você MS-DOS
1
Adicione -i ao sed para atualizar o (s) arquivo (s) com as alterações.
Johan
17
Em Unix / Linux:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
No MacOSX
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Observe o $ após sed para mac.
No Windows
Existe Super Sed uma versão aprimorada do sed. Para o Windows, é um .exe autônomo, destinado à execução na linha de comando.
"Observe o $ após sed para mac." - Obrigado senhor!
Alguém ainda usa você MS-DOS
1
A string Bash "estilo C" $'\xEF\xBB\xBF//'é um recurso Bash, não particularmente um recurso Mac ou OSX. Com essa estrutura, o Bash analisará as sequências de escape em bytes reais antes de passar a linha de comando para sed. Dependendo da sua sedvariante, isso pode ou não funcionar (embora tenha certeza de que é útil para os usuários do OSX saber que deve funcionar fora da caixa para eles).
<U+FEFF>
, esse é<0xEF,0xBB,0xBF>
o BOM dos arquivos UTF8, então você deve alterar o título. Como você gostaria de removê-los? Por fadas mágicas? Por ferramenta de linha de comando? Editando um por um? O Notepad ++ pode alterar a codificação para UTF8 sem BOM. Por exemplo, pesquisando no Google 5 segundos de "strip BOM utf8", encontrei isso para Linux: ueber.net/who/mjl/projects/bomstripU+FEFF
é o ponto de código Unicode usado para um BOM, mas o próprio BOM é como esse ponto de código é codificado (UTF-80xEF 0xBB 0xBF
:, UTF-16LE:,0xFF 0xFE
UTF-16BE:,0xFE 0xFF
etc). Portanto, os arquivos em questão são codificados em UTF-8, que o compressor detecta ao decodificá-los para pontos de código Unicode reais.Respostas:
Eu presumo que a ferramenta falhará se você tiver outro utf-8 em seus arquivos, mas se não tiver, talvez esta solução alternativa possa ajudá-lo. (Não testado ...)
Editar : adicionada a
-CSD
opção, conforme comentário do cristão.fonte
-CSD
switch, ou com oPERL_UNICODE
envariable definido comoSD
, para que funcione.perl -CSD -pe 's/^\x{feff}//' file.csv
:, observe a mudança de <fffe> para <feff>.Você pode removê-los facilmente usando o vim . Aqui estão as etapas:
1) Em seu terminal, abra o arquivo usando o vim:
2) Remova todos os caracteres BOM :
3) Salve o arquivo:
fonte
Outro método para remover esses caracteres - usando o Vim :
Agora, esses caracteres "ocultos" são visíveis (
<feff>
) e podem ser removidos.fonte
Obrigado pelas respostas anteriores, aqui está uma variante sed (1) para o caso de:
fonte
Em Unix / Linux:
No MacOSX
Observe o $ após sed para mac.
No Windows
Existe Super Sed uma versão aprimorada do sed. Para o Windows, é um .exe autônomo, destinado à execução na linha de comando.
fonte
$'\xEF\xBB\xBF//'
é um recurso Bash, não particularmente um recurso Mac ou OSX. Com essa estrutura, o Bash analisará as sequências de escape em bytes reais antes de passar a linha de comando parased
. Dependendo da suased
variante, isso pode ou não funcionar (embora tenha certeza de que é útil para os usuários do OSX saber que deve funcionar fora da caixa para eles).Usar cauda pode ser mais fácil:
fonte
A solução do @tripleee não funcionou para mim. Mas mudar a codificação do arquivo para ASCII e novamente para UTF-8 resolveu :-)
fonte
Eu usei o vimgrep para isso
também comando de pesquisa normal do vim
fonte
O comando 'arquivo' mostra se o BOM está presente:
Por exemplo: 'file myfile.xml' exibe: "Documento XML 1.0, texto UTF-8 Unicode (com BOM), com linhas muito longas, com terminadores de linha CRLF"
dos2unix irá remover o BOM.
fonte
No Windows, você pode usar o utilitário de recodificação backported da UnxUtils .
fonte
Em Sublime Text você pode instalar o pacote Highlighter e personalizar a expressão regular nas configurações do usuário.
Aqui eu adicionei
\uFEFF
ao final dahighlighter_regex
propriedade.{ "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 }
Para substituir as configurações do pacote padrão, coloque o arquivo aqui:
fonte
Sugiro o uso da ferramenta "dos2unix", teste para rodar
dos2unix ./thefile.js
.Se necessário, tente usar algo assim para vários arquivos:
Meus cumprimentos.
fonte
bomstrip
não estava facilmente disponível no meu mac - entãofind . -type f -exec dos2unix '{}' +
Salve o arquivo sem assinatura de código.
fonte