Eso no es <U+FEFF>, es decir, <0xEF,0xBB,0xBF>esa es la lista de materiales de los archivos UTF8, por lo que debe cambiar el título. ¿Cómo le gustaría eliminarlos? ¿Por hadas mágicas? ¿Con la herramienta de línea de comandos? ¿Editando uno por uno? Notepad ++ puede cambiar la codificación a UTF8 sin BOM. Por ejemplo, simplemente buscando en Google 5 segundos de "strip BOM utf8". He encontrado esto para Linux: ueber.net/who/mjl/projects/bomstrip
xanatos
1
Podría ayudarlo a obtener una respuesta que se relacione específicamente con su problema si nos dice qué herramienta de JavaScript está utilizando para realizar la compresión, en qué plataforma y qué otras herramientas son parte de su proceso de compilación.
SingleNegationElimination
15
Las listas de materiales en UTF-8 son absolutamente basura. Necesita encontrar al productor de ese archivo y decirle que lo elimine @ # %%.
tchrist
4
@peterflynn: U+FEFFes el punto de código Unicode que se usa para una lista de materiales, pero la lista de materiales en sí es cómo se codifica ese punto de código (UTF-8:, 0xEF 0xBB 0xBFUTF-16LE:, 0xFF 0xFEUTF-16BE:, 0xFE 0xFFetc.). Entonces, los archivos en cuestión están codificados en UTF-8, que el compresor detecta al decodificarlos en puntos de código Unicode reales.
Remy Lebeau
4
@xanatos Independientemente de lo que sea, así es como se manifiesta, y así es como la gente puede encontrar fácilmente esta pregunta usando los motores de búsqueda.
Debe ejecutar con el -CSDinterruptor, o con el PERL_UNICODEenvariable configurado en SD, para que eso funcione.
tchrist
Regexp funciona bien para eliminar el carácter <fffe> al principio de una línea, para reemplazar todos los caracteres <fffe> en una línea: 's / \ x {fffe} // g'.
Diego Pino
2
En Mac OSX, tuve que cambiar a:, perl -CSD -pe 's/^\x{feff}//' file.csvobserve el cambio de <fffe> a <feff>.
mpettis
1
@mpettis Entonces, eso no es una lista de materiales, sino una lista de materiales con los bytes invertidos. Podría suceder en cualquier plataforma, si convierte UTF-16 a UTF-8 y obtiene un orden de bytes incorrecto (¡aunque el propósito de la lista de materiales es evitar ese error!)
tripleee
1
@blong ¿Qué pasa con eso? Haga una pregunta por separado si no puede resolverlo (pero probablemente se marcará como un duplicado; primer
acceso de
185
Puede eliminarlos fácilmente usando vim , estos son los pasos:
Otras fuentes sugieren anteponer la figura 1 al patrón, como en "sed '1 s / \ xEF \ xBB \ xBF //'", para que solo coincida con la primera línea. Sin embargo, para mí en Mac OS X, ninguna de las dos formas funciona.
Marian
1
Esto funcionó y fue la mejor solución para mí. ¡Gracias Señor!
Vance Lucas
1
Me encantó esta solución. Más fácil de implementar y aún escalable ... :)
Piko
1
@Marian Un poco tarde, pero puede verificar la respuesta de Masum que muestra por qué no funcionó en Mac.
Alguien todavía te usa MS-DOS
1
Agregue -i a sed para actualizar los archivos con los cambios.
Johan
17
En Unix / Linux:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
En MacOSX
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Observe el $ después de sed para mac.
En Windows
Hay Super Sed, una versión mejorada de sed. Para Windows, este es un .exe independiente, diseñado para ejecutarse desde la línea de comandos.
"Observe el $ después de sed para mac". - ¡Gracias Señor!
Alguien todavía te usa MS-DOS
1
La cadena Bash "estilo C" $'\xEF\xBB\xBF//'es una característica de Bash, no particularmente una característica de Mac o OSX. Con esta construcción, Bash analizará las secuencias de escape en bytes reales antes de pasar la línea de comando a sed. Dependiendo de su sedvariante, esto puede funcionar o no (aunque estoy seguro de que es útil para los usuarios de OSX saber que debería funcionar para ellos).
Me gustó tu respuesta, bomstripno estaba disponible fácilmente en mi mac, así que me tomé el tiempo para darte la versión simple:find . -type f -exec dos2unix '{}' +
<U+FEFF>
, es decir,<0xEF,0xBB,0xBF>
esa es la lista de materiales de los archivos UTF8, por lo que debe cambiar el título. ¿Cómo le gustaría eliminarlos? ¿Por hadas mágicas? ¿Con la herramienta de línea de comandos? ¿Editando uno por uno? Notepad ++ puede cambiar la codificación a UTF8 sin BOM. Por ejemplo, simplemente buscando en Google 5 segundos de "strip BOM utf8". He encontrado esto para Linux: ueber.net/who/mjl/projects/bomstripU+FEFF
es el punto de código Unicode que se usa para una lista de materiales, pero la lista de materiales en sí es cómo se codifica ese punto de código (UTF-8:,0xEF 0xBB 0xBF
UTF-16LE:,0xFF 0xFE
UTF-16BE:,0xFE 0xFF
etc.). Entonces, los archivos en cuestión están codificados en UTF-8, que el compresor detecta al decodificarlos en puntos de código Unicode reales.Respuestas:
Asumiría que la herramienta se romperá si tiene otro utf-8 en sus archivos, pero si no, tal vez esta solución pueda ayudarlo. (Sin probar ...)
Editar : agregó la
-CSD
opción, según el comentario de tchrist.fuente
-CSD
interruptor, o con elPERL_UNICODE
envariable configurado enSD
, para que eso funcione.perl -CSD -pe 's/^\x{feff}//' file.csv
observe el cambio de <fffe> a <feff>.Puede eliminarlos fácilmente usando vim , estos son los pasos:
1) En su terminal, abra el archivo usando vim:
2) Elimine todos los caracteres BOM :
3) Guarde el archivo:
fuente
Otro método para eliminar esos caracteres, usando Vim :
Ahora esos caracteres "ocultos" son visibles (
<feff>
) y pueden eliminarse.fuente
Gracias por las respuestas anteriores, aquí hay una variante sed (1) por si acaso:
fuente
En Unix / Linux:
En MacOSX
Observe el $ después de sed para mac.
En Windows
Hay Super Sed, una versión mejorada de sed. Para Windows, este es un .exe independiente, diseñado para ejecutarse desde la línea de comandos.
fuente
$'\xEF\xBB\xBF//'
es una característica de Bash, no particularmente una característica de Mac o OSX. Con esta construcción, Bash analizará las secuencias de escape en bytes reales antes de pasar la línea de comando ased
. Dependiendo de sused
variante, esto puede funcionar o no (aunque estoy seguro de que es útil para los usuarios de OSX saber que debería funcionar para ellos).Usar la cola podría ser más fácil:
fuente
La solución de @ tripleee no funcionó para mí. Pero cambiar la codificación del archivo a ASCII y nuevamente a UTF-8 funcionó :-)
fuente
He usado vimgrep para esto
también comando normal de búsqueda de vim
fuente
El comando 'archivo' muestra si la lista de materiales está presente:
Por ejemplo: 'file myfile.xml' muestra: "Documento XML 1.0, texto Unicode UTF-8 (con BOM), con líneas muy largas, con terminadores de línea CRLF"
dos2unix eliminará la lista de materiales.
fuente
En Windows, puede usar la utilidad de recodificación retroportada de UnxUtils .
fuente
En Sublime Text puedes instalar el paquete Highlighter y luego personalizar la expresión regular en su configuración de usuario.
Aquí agregué
\uFEFF
al final de lahighlighter_regex
propiedad.{ "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 sobrescribir la configuración predeterminada del paquete, coloque el archivo aquí:
fuente
Sugiero el uso de la herramienta "dos2unix", pruébelo para ejecutarlo
dos2unix ./thefile.js
.Si es necesario, intente usar algo como esto para varios archivos:
Mis saludos.
fuente
bomstrip
no estaba disponible fácilmente en mi mac, así que me tomé el tiempo para darte la versión simple:find . -type f -exec dos2unix '{}' +
Guarde el archivo sin firma de código.
fuente