UTF-8 sin BOM

180

Tengo archivos javascript que necesito que se guarden en UTF-8 (sin BOM), cada vez que los convierto al formato correcto en Notepad ++ , vuelven a UTF-8 con BOM cuando los abro en Visual Studio. ¿Cómo puedo evitar que VS2010 haga eso?

Otra pregunta, ¿UTF-8 sin firma en Visual Studio es lo mismo que UTF-8 sin BOM?

kabaros
fuente
13
un archivo guardado con (utf-8 sin BOM) se revierte a (utf-8 con BOM) ... este es el problema
kabaros
La solución al problema de kabaros es simple: solo guarde el archivo con Visual Studio usando uft-8 sin BOM. Sí, es posible, como Keavon notó "UTF-8 sin firma está casi al final de la lista". Es bastante extraño que utf-8 con firma esté al principio y utf-8 sin firma esté casi al final, pero al menos resuelve este problema frustrante.
cyriel

Respuestas:

227

BOM o Byte Order Mark es a veces bastante molesto. Visual Studio no cambia el archivo a menos que lo guarde (como dijo Hans).

Y aquí está la solución a su problema: si desea guardar un archivo con otras codificaciones, seleccione Guardar como y extienda el botón Guardar en el diálogo de archivo y seleccione "Guardar con codificación". O si desea deshacerse de esta configuración de forma permanente, simplemente abra el menú Archivo y seleccione "Opciones avanzadas de guardado" y allí debe seleccionar "UTF-8 sin firma" (y eso también respondió a su última pregunta :). Sí, "UTF-8 sin firma" es lo mismo que sin BOM.

Dave81
fuente
11
Me preguntaba si hay una opción para habilitar esto de forma predeterminada para todos los archivos.
Mihai
3
Guardó el archivo correctamente cuando elegí "Guardar con codificación", pero no veo "Opciones de guardado avanzadas" en mi menú Archivo, sin importar qué tipo de archivo tengo abierto en el editor. Hm ....
Chris Jaynes
20
@ChrisJaynes, haga clic con el botón derecho en la barra de menú, en un lugar abierto, luego haga clic en personalizar ... comandos ... (*) barra de menú: Archivo ... [Agregar comando] ... agregue las "Opciones de guardado avanzadas" que puse justo encima de "Guardar selección"
Rastreador1
44
Bueno, no tengo la entrada "UTF-8 sin firma" ... ¿cuál es el problema entonces?
Marco Klein
14
Nota: UTF-8 sin firma está cerca del final de la lista.
Keavon
29

Ahora con fotos.

  1. Ve a File-> Save As.

    Archivo / Guardar como

  2. Luego, en el botón Guardar, haga clic en el triángulo y haga clic Save with Encoding....

    Ahorre con codificación

  3. Haga clic en Aceptar para sobrescribir el archivo y luego, en la lista de codificaciones, busque UTF-8 Without signature-> Haga clic OK.

    UTF-8 sin firma

Espero que esto te ahorre algo de tiempo.

Matas Vaitkevicius
fuente
26

He creado el archivo Fix Codificación de extensión que impide Visual Studio 2010+ de la adición de la lista de materiales a UTF-8 archivos.

Sergey Vlasov
fuente
1
¡Gracias por ese complemento! Debería haber otra forma de especificar tipos de archivo que no sea el uso de una expresión regular en la configuración que coincida con los sufijos de archivo. Además, el complemento solo actúa en los archivos cuando los guardo, cuando creo un javascript, inicialmente tiene una lista de materiales (3 bytes agregados).
Anders Lindén
6

Lamentablemente, esto no funciona con archivos csproj. No existe una "Opción de guardado avanzada" y, aunque la haya configurado en "UTF-8 sin firma" para un archivo cs, los archivos csproj aún se guardan con BOM. Si usa VSS, todavía se queja de los archivos del proyecto.

Wray
fuente
Tal vez deberías pasar de VSS a SVN. Recuerdo haber visto una herramienta que puede hacer la conversión por ti. SVN es gratuito y con un pequeño precio puede usar el complemento visual SVN en su estudio visual y usar SVN directamente desde la interfaz de usuario.
Dave81
77
"Tal vez deberías pasar de VSS a SVN". ¿Qué tipo de sugerencia es esa? La mayoría de nosotros que trabajamos en software empresarial no podemos elegir nuestro Sistema de control de código fuente. SVN tiene problemas que fue lo que impulsó la creación de git, porque estaban hartos de SVN.
Shiva
4

UTF-8: "Guardar como" (sin firma) Predeterminado: solicitud para incluir el valor predeterminado para UTF sin firma

VS 2017 admite de forma nativa EditorConfig, por lo que una solución recomendada es agregar un .editorconfigarchivo a su base de código y configurarlo charset => utf-8. Luego, una vez que guarde un archivo, se guardará como UTF-8 sin BOM.

Dave Anderson
fuente
Me temo que VS 2017 todavía no es compatible charsetcon .editorconfig github.com/editorconfig/editorconfig-visualstudio/issues/…
BlazingFrog el
2

Para vs2010 c ++, habrá problemas con UTF8 sin BOM, cuando los archivos de origen contienen caracteres de varios bytes (por ejemplo, chino).

Esos caracteres no se reconocerán correctamente sin BOM y darán lugar a una compilación fallida.

Martin Wang
fuente
porque en Windows sin BOM, se supondrá que el archivo tiene codificación ANSI, por lo que se romperá
phuclv
2

Recientemente encontré esta pequeña herramienta de línea de comandos que agrega o elimina la lista de materiales en archivos codificados UTF-8 arbitrarios: UTF BOM Utils ( nuevo enlace en github)

Pequeño inconveniente, solo puede descargar el código fuente de C ++. Debe crear el archivo MAKE (con CMake , por ejemplo) y compilarlo usted mismo, no se proporcionan binarios en esta página. Sin embargo, para un desarrollador de software esto no debería ser un problema.

Wernfried Domscheit
fuente
1

Incluso con la solución de Dave81, Visual Studio 2015 Community todavía estaba volviendo mi archivo a UTF8-BOM cada vez que guardaba ese archivo html.

Cuando creé ese archivo html, hice clic derecho en el proyecto y seleccioné "Agregar" y luego agregué un archivo HTML.

De forma predeterminada, Visual Studio incluirá una <meta charset="utf-8" />etiqueta en su archivo HTML.

Simplemente quitando la etiqueta y luego aplicando la solución de Dave81, el problema desapareció de verdad esta vez.

Parece que Visual Studio analiza su archivo html y cuando ve esa etiqueta, convierte el archivo a UTF8-BOM sin tener en cuenta el formato de archivo original (UTF-8 sin BOM).

Hubiera hecho un comentario directamente bajo la solución de Dave81, pero no tenía suficientes puntos para hacerlo ...

Jonny
fuente
0

Para Visual Studio Code, haga lo siguiente:

  1. Desde abajo a la derecha, seleccione la codificación actual ingrese la descripción de la imagen aquí
  2. De las opciones, seleccione Guardar con enconding ingrese la descripción de la imagen aquí
  3. De las opciones, seleccione UTF-8 ingrese la descripción de la imagen aquí
Mahesh
fuente
VS y el código VS son muy diferentes. Esta pregunta es sobre VS
phuclv
aunque la pregunta era para VS y usted respondió para VScode que resolvió mi problema, por lo tanto, lo votó a favor
Ashu
-2
UTF8Encoding utf8EmitBOM = new UTF8Encoding(false);
StreamWriter  sw = new StreamWriter(Path.Combine(sourcefilePath, fileName), false, utf8EmitBOM);

Este código creará un archivo en UTF-8 sin BOM

Jugendra Singh
fuente
la pregunta es sobre la codificación al guardar un archivo de código fuente en el IDE, no sobre la configuración de la codificación al escribir algún archivo en código C #
phuclv