2011-12-08 145 views
19

Tengo un archivo CSV con acentos especiales y lo guardo en el Bloc de notas seleccionando la codificación UTF-8. Cuando leo el archivo usando Java, también lee los caracteres de la BOM.¿Cómo hacer que Notepad guarde texto en UTF-8 sin BOM?

Así que quiero guardar este archivo en formato UTF-8 sin agregar una lista de materiales inicialmente en el Bloc de notas.

De lo contrario, ¿hay alguna clase incorporada en Java que elimine los caracteres BOM que se presentan al principio, al leer los contenidos en un archivo?

+1

¿Quizás ... no use el bloc de notas para tratar con el texto UTF8? Pruebe cualquiera de la otra multitud de editores de texto, como Notepad ++ o jEdit. – cdeszaq

+1

Haciendo que la función anterior aparezca en el bloc de notas, ya que solo viene con Microsoft :) – user1058036

Respuesta

30
  1. Use Notepad++ - gratis y mucho mejor que el Bloc de notas. Esto ayudará a guardar mensajes de texto sin BOM usando Enconding>Codificar en UTF-8 sin BOM: Screenshot of the Notepad++ Menubar > Encoding > Encode in UTF-8 without BOM menu in Notepad++ v6.7.9.2

  2. Cuando me encontré con este problema en Java, no he encontrado ninguna biblioteca para analizar estos tres primeros bytes (BOM). Así que mi consejo:

    • Use PushbackInputStream(in, 3).
    • Leer los tres primeros bytes
    • Si no es BOM (EF BB BF), empujarlos hacia atrás
    • Proceso de la corriente como UTF-8
+0

¿Has encontrado una mejor manera? – korifey

+0

Estoy investigando esto ahora. Publicaré aquí si encuentro una forma mejor que quitar los bytes. El problema con la eliminación ciega de bytes es 'No puedo decir que los archivos se guarden solo con utf-8. También pueden codificarse en ANSI. . ' – user1058036

+0

No necesita desnudarse a ciegas. Si analiza los primeros dos bytes y es la lista de materiales, tiene un 99% de probabilidad de que el archivo esté en UTF-8. Solo en este caso debes cortarlos. De todos modos, escribe aquí tu solución cuando la encuentres. – korifey

0

La respuesta es: No, en absoluto. El Bloc de notas no puede hacer eso.

En Java puede omitir el primer byte en su InputStream y estar listo.

+0

El Bloc de notas agrega algunos bytes invisibles al principio del archivo para identificar el orden de bytes en el que está codificado el archivo actual. – user1058036

+0

y luego omita los bytes apropiados. Si el bloc de notas los agrega y desea adherirse al bloc de notas, sáltelos y todo estará bien. –

+0

Verificará cualquier otra solución que no sea eliminar los bytes. Si nada es factible, entonces debo quitar los bytes. No puedo decir que los archivos se guarden solo con utf-8. También puede estar codificado en ANSI. – user1058036

9

Use Notepad ++ en su lugar. Ver mi personal blog post en él. Desde Notepad ++, elija el menú "Codificación", luego "Codificar en UTF-8 sin BOM".

+0

Conozco el bloc de notas 2 y el bloc de notas ++. Quiero hacer eso en el propio bloc de notas – user1058036

+0

El bloc de notas estándar de Windows no es un editor verdadero, y no admite ninguna opción sobre la funcionalidad de BOM. Si no desea usar otro editor, deberá seguir el consejo de una de las otras respuestas aquí para manejar adecuadamente la lista de materiales dentro del código Java. – ziesemer

8

Me acabo de enterar de this Stack Overflow post, como @ Martin-Geisler señala, que se pueden guardar archivos sin la lista de materiales en la libreta de Windows, por seleccionar ANSI como la codificación.

Supongo que para usos más avanzados esto no funcionará porque el archivo resultante probablemente no sea la codificación final deseada, sino que en realidad es ANSI; pero probé y confirmé que esto funciona para guardar un script .php muy pequeño sin BOM usando solo Notepad.

he aprendido el camino largo y duro que Windows Bloc de notas no es un verdadero editor, aunque me gustaría señalar a otros que, a pesar de esto, es engañosamente convocados al escribir "editor "en máquinas Windows más nuevas, al menos en una de las mías.

Actualmente estoy usando Emacs y otros editores para resolver este problema.

+0

elegir ANSI en bloc de notas ++ funcionó para mí, pero codificarlo sin BOM didnt – paul

Cuestiones relacionadas