Pregunta

¿Qué diferencia hay entre UTF-8 y UTF-8 sin lista de materiales?¿Cual es mejor?

¿Fue útil?

Solución

El BOM UTF-8 es una secuencia de bytes en el inicio de un texto-stream (EF BB BF) que permite que el lector de adivinar de manera más fiable que un archivo es codificado en UTF-8.

Normalmente, la lista de materiales se utiliza para indicar el orden de bits de una codificación, pero desde endianness es irrelevante para UTF-8, la lista de materiales es innecesario.

De acuerdo con la Unicode estándar, el lista de materiales para UTF-8 archivos no se recomienda

  Esquemas

2.6 Codificación

     

... El uso de una lista de materiales es necesario ni recomendable para UTF-8, pero puede ser   encontrado en contextos en UTF-8 datos se convierten de otro   formas de codificación que utilizan una lista de materiales o donde la lista de materiales se utiliza como UTF-8   firma. Consulte la subsección “Byte marca de orden” en Sección 16.8,   Especiales ,   para obtener más información.

Otros consejos

Las otras excelentes respuestas ya respondieron que:

  • No hay ninguna diferencia oficial entre UTF-8 y BOM-ed UTF-8
  • Una lista de materiales de opinión cadena UTF-8 se iniciará con las tres siguientes bytes. EF BB BF
  • Los bytes, si están presentes, deben ser ignorados cuando se extrae la cadena desde el archivo / corriente.

Pero, como información adicional a esto, la lista de materiales para UTF-8 podría ser una buena manera de "olor" si una cadena se ha codificado en UTF-8 ... O podría ser una cadena legítimo en cualquier otra codificación. ..

Por ejemplo, los datos [EF BB BF 41 42 43] o bien podría ser:

Así que si bien puede ser fresco para reconocer la codificación de un archivo de contenido examinado los primeros bytes, no se debe confiar en esto, como se muestra en el ejemplo anterior

codificaciones deben ser conocidos, no adivinado.

Hay por lo menos tres problemas con poner una lista de materiales en los archivos de codificación UTF-8.

  1. Los archivos que no retienen el texto ya no están vacíos, ya que siempre contienen la lista de materiales.
  2. Los archivos que contienen texto que se encuentra dentro del subconjunto ASCII de UTF-8 ya no son ellos mismos ASCII debido a que la lista de materiales no es ASCII, lo que hace que algunas herramientas existentes se descomponen, y puede ser imposible para los usuarios reemplazar tales herramientas heredadas.
  3. No es posible concatenar varios archivos juntos porque cada archivo tiene ahora una lista de materiales al principio.

Y, como otros han mencionado, que no es suficiente ni necesario disponer de una lista de materiales para detectar que algo está UTF-8:

  • No es suficiente, ya que una secuencia de bytes arbitraria puede pasar a comenzar con la secuencia exacta que constituye la lista de materiales.
  • No es necesario ya que sólo puede leer los bytes como si fueran UTF-8; si que tiene éxito, es, por definición, UTF-8 válido.

Es una vieja pregunta con muchas buenas respuestas, pero se debe agregar una cosa.

Todas las respuestas son muy generales.Lo que me gustaría agregar son ejemplos del uso de BOM que realmente causan problemas reales y, sin embargo, muchas personas no lo saben.

BOM rompe guiones

Los scripts de Shell, los scripts de Perl, los scripts de Python, los scripts de Ruby, los scripts de Node.js o cualquier otro ejecutable que deba ser ejecutado por un intérprete; todos comienzan con un línea shebang que se parece a uno de esos:

#!/bin/sh
#!/usr/bin/python
#!/usr/local/bin/perl
#!/usr/bin/env node

Le dice al sistema qué intérprete debe ejecutarse al invocar dicho script.Si el script está codificado en UTF-8, uno puede tener la tentación de incluir una lista de materiales al principio.Pero en realidad el "#!" Los personajes no son solo personajes.De hecho son un número mágico que está compuesto por dos caracteres ASCII.Si coloca algo (como una lista de materiales) antes de esos caracteres, entonces el archivo parecerá que tiene un número mágico diferente y eso puede generar problemas.

Ver Wikipedia, artículo:Shebang, sección:número mágico:

Los caracteres de Shebang están representados por los mismos dos bytes en codificaciones ASCII extendidas, incluido UTF-8, que se usa comúnmente para scripts y otros archivos de texto en los sistemas actuales de unix.Sin embargo, los archivos UTF-8 pueden comenzar con la marca de pedido de bytes opcional (BOM);Si la función "EXEC" detecta específicamente los bytes 0x23 y 0x21, entonces La presencia del BOM (0xef 0xbb 0xbf) antes de que el shebang evitará que el intérprete de script sea ejecutado. Algunas autoridades recomiendan no usar la marca de la orden de bytes en los scripts POSIX (UNIX-Like), [14] por este motivo y por la interoperabilidad más amplia y las preocupaciones filosóficas.Además, una marca de orden de bytes no es necesaria en UTF-8, ya que esa codificación no tiene problemas de endianness;Solo sirve para identificar la codificación como UTF-8.[énfasis añadido]

BOM es ilegal en JSON

Ver RFC 7159, Sección 8.1:

Las implementaciones NO DEBEN agregar una marca de orden de bytes al comienzo de un texto JSON.

BOM es redundante en JSON

No solo es ilegal en JSON, también es innecesario para determinar la codificación de caracteres porque hay formas más confiables de determinar sin ambigüedades tanto la codificación de caracteres como la endianidad utilizada en cualquier secuencia JSON (consulte esta respuesta para detalles).

BOM rompe los analizadores JSON

No solo es ilegal en JSON y innecesario, En realidad rompe todo el software que determinan la codificación utilizando el método presentado en RFC 4627:

Determinando la codificación y el endianidad de JSON, examinando los primeros 4 bytes para buscar el byte NUL:

00 00 00 xx - UTF-32BE
00 xx 00 xx - UTF-16BE
xx 00 00 00 - UTF-32LE
xx 00 xx 00 - UTF-16LE
xx xx xx xx - UTF-8

Ahora, si el archivo comienza con BOM se verá así:

00 00 FE FF - UTF-32BE
FE FF 00 xx - UTF-16BE
FF FE 00 00 - UTF-32LE
FF FE xx 00 - UTF-16LE
EF BB BF xx - UTF-8

Tenga en cuenta que:

  1. UTF-32BE no comienza con tres NUL, por lo que no será reconocido
  2. UTF-32LE el primer byte no va seguido de 3 NUL, por lo que no será reconocido
  3. UTF-16BE tiene sólo 1 NUL en los primeros 4 bytes por lo que no será reconocido
  4. UTF-16LE tiene sólo 1 NUL en los primeros 4 bytes por lo que no será reconocido

Dependiendo de la implementación, todos ellos pueden interpretarse incorrectamente como UTF-8 y luego malinterpretarse o rechazarse como UTF-8 no válido, o no reconocerse en absoluto.

Además, si la implementación prueba JSON válido como recomiendo, rechazará incluso la entrada que de hecho esté codificada como UTF-8 porque no comienza con un carácter ASCII <128 como debería según el RFC.

Otros formatos de datos

La BOM en JSON no es necesaria, es ilegal y daña el software que funciona correctamente según el RFC.Debería ser una obviedad simplemente no usarlo en ese momento y, sin embargo, siempre hay personas que insisten en romper JSON mediante el uso de listas de materiales, comentarios, diferentes reglas de cotización o diferentes tipos de datos.Por supuesto, cualquiera es libre de usar cosas como listas de materiales o cualquier otra cosa si lo necesita, pero no lo llame JSON entonces.

Para otros formatos de datos además de JSON, observe cómo se ve realmente.Si las únicas codificaciones son UTF-* y el primer carácter debe ser un carácter ASCII inferior a 128, entonces ya tiene toda la información necesaria para determinar tanto la codificación como el endianidad de sus datos.Agregar listas de materiales incluso como una característica opcional solo lo haría más complicado y propenso a errores.

Otros usos de la lista de materiales

En cuanto a los usos fuera de JSON o scripts, creo que aquí ya hay muy buenas respuestas.Quería agregar información más detallada específicamente sobre secuencias de comandos y serialización porque es un ejemplo de caracteres BOM que causan problemas reales.

  

Lo que es diferente entre UTF-8 y UTF-8 sin BOM?

Respuesta corta:. En UTF-8, una lista de materiales se codifica como la EF BB BF bytes al comienzo del archivo

Respuesta larga:

Originalmente, se esperaba que Unicode se codifica en UTF-16 / UCS-2 . La lista de materiales fue diseñado para esta forma de codificación. Cuando se tiene unidades de código de 2 bytes, es necesario indicar qué orden los dos bytes se encuentran, y una convención común para hacer esto es incluir el carácter U + FEFF como una "orden de bytes Marca" al principio de los datos. El carácter U + FFFE está permanentemente sin asignar de manera que su presencia puede ser utilizado para detectar el orden de bytes mal.

UTF-8 tiene el mismo orden de bytes, independientemente de la plataforma orden de bits, por lo que no se necesita una marca de orden de bytes. Sin embargo, puede ocurrir (como la secuencia de bytes EF BB FF) en datos que se convierte en UTF-8 de UTF-16, o como una "firma" para indicar que los datos es UTF-8.

  

¿Qué es mejor?

Sin. Como respondió Martin Cote, el estándar Unicode no lo recomienda. Esto provoca problemas de software no-BOM-conscientes.

Una mejor manera de detectar si un archivo es UTF-8 es llevar a cabo una comprobación de validez. UTF-8 tiene reglas estrictas sobre lo secuencias de bytes son válidas, por lo que la probabilidad de un falso positivo es insignificante. Si una secuencia de bytes se parece a UTF-8, probablemente lo es.

UTF-8 con BOM es mejor identificados. He llegado a esta conclusión por las malas. Estoy trabajando en un proyecto en el que uno de los resultados es un archivo CSV , incluyendo caracteres Unicode.

Si el archivo CSV se guarda sin una lista de materiales, Excel piensa que es ANSI y muestra un galimatías. Una vez que añadir "EF BB BF" en la parte delantera (por ejemplo, volver a guardarlo en el Bloc de notas con UTF-8; o Notepad ++ con UTF-8 con BOM), Excel lo abre bien

.

Cómo agregar el prefijo el carácter BOM a los archivos de texto Unicode es recomendado por el RFC 3629: "UTF-8, un formato de transformación de la norma ISO 10646", noviembre de 2003 en http://tools.ietf.org/html/rfc3629 (esta última información se encuentra en: http://www.herongyang.com/Unicode/Notepad-Byte-Order-Mark-BOM -FEFF-EFBBBF.html)

lista de materiales tiende a Boom (sin juego de palabras (sic)) en algún lugar, en algún lugar. Y cuando se Plumas (por ejemplo, no ser reconocido por los navegadores, editores, etc.), se muestra como los personajes extraños  al comienzo del documento (por ejemplo, archivo HTML, JSON respuesta , RSS , etc.) y hace que el tipo de situaciones embarazosas como el experimentó durante el charla de Obama en Twitter .

Es muy molesto cuando se presenta en lugares difíciles de depurar o cuando se descuida la prueba. Así que es mejor evitarlo a menos que debe utilizarlo.

  

Pregunta: ¿Cuál es diferente entre UTF-8 y UTF-8 sin una lista de materiales? ¿Qué es mejor?

Estos son algunos extractos del artículo de Wikipedia sobre el marca de orden de bytes (BOM) que creo que ofrecen una respuesta sólida a esta pregunta.

En el significado de la lista de materiales y UTF-8:

  

El estándar Unicode permite la lista de materiales en UTF-8 , pero no requiere   o recomendar su uso. orden de bytes no tiene ningún significado en UTF-8, por lo que su   utilizar sólo en UTF-8 es para señalar desde el principio que es la secuencia de texto   codificado en UTF-8.

Argumento para no utilizando una lista de materiales:

  

La motivación principal para no utilizar una lista de materiales es de compatibilidad hacia atrás   con un software que no es compatibles con Unicode ... Otra motivación para no   usando una lista de materiales es animar a UTF-8 como la codificación "default".

Argumento A utilizando una lista de materiales:

  

El argumento para el uso de una lista de materiales es que sin él, análisis heurístico es   necesaria para determinar qué codificación de caracteres que un archivo está utilizando.   Históricamente, tales análisis, para distinguir varias codificaciones de 8 bits, es   complicado, propenso a errores, ya veces lento. Un número de bibliotecas   están disponibles para facilitar la tarea, como Mozilla universal Juego de caracteres   Detector y Internacional Componentes para Unicode.

     

Los programadores asumen erróneamente que la detección de UTF-8 es igualmente   difícil (no se debe a la gran mayoría de las secuencias de bytes   son UTF-8 válidos, mientras que las codificaciones de estas bibliotecas están tratando de   distinguir permitir que todas las posibles secuencias de bytes). Por lo tanto, no todos   programas compatibles con Unicode realizan un análisis de este tipo y en su lugar se basan en   la lista de materiales.

     

En particular, Microsoft compiladores e intérpretes, y muchos   piezas de software de Microsoft Windows, como el Bloc de notas no lo hará   leer correctamente UTF-8, salvo si se tiene sólo caracteres ASCII o se   comienza con la lista de materiales, y añadirá una lista de materiales para el inicio al guardar el texto   como UTF-8. Google Docs añadir una lista de materiales cuando un documento de Microsoft Word es   descargado como un archivo de texto sin formato.

¿En qué es mejor, CON o SIN la lista de materiales:

  

El IETF recomienda que si un protocolo o bien (a) siempre utiliza UTF-8,   o (b) tiene de alguna otra manera para indicar qué codificación se utiliza,   entonces “deberían prohibir el uso de T + FEFF como una firma.”

Mi conclusión:

Utilice la lista de materiales solamente si la compatibilidad con una aplicación de software es absolutamente esencial.

También tenga en cuenta que si bien el artículo de Wikipedia referencia indica que muchas de las aplicaciones de Microsoft se basan en la lista de materiales para detectar correctamente UTF-8, este no es el caso para los todos aplicaciones de Microsoft. Por ejemplo, como ha señalado @barlop , cuando se utiliza el símbolo del sistema de Windows con UTF-8 , comandos tales type y more no espere que la lista de materiales para estar presente. Si la lista de materiales es presente, puede ser problemático, ya que es para otras aplicaciones.


chcp ofrece apoyo para UTF-8 ( sin la lista de materiales) a través de la página de códigos 65001 .

Citado en la parte inferior de la página de Wikipedia sobre la lista de materiales: http: // en .wikipedia.org / wiki / Byte-order_mark # cite_note-2

  

"El uso de una lista de materiales no es ni necesario ni recomendado para UTF-8, pero puede ser encontrado en contextos en UTF-8 Los datos se convierten de otras formas de codificación que utilizan una lista de materiales o donde la lista de materiales se utiliza como UTF-8 firma "

Debe tenerse en cuenta que para algunos archivos que no debe tiene la lista de materiales, incluso en Windows. Ejemplos de ello son archivos SQL*plus o VBScript. En tal caso, los archivos contiene una lista de materiales se produce un error al intentar ejecutarlos.

Esta pregunta ya tiene un millón y uno-respuestas y muchos de ellos son bastante buenos, pero yo quería probar y aclarar cuando una lista de materiales debe o no debe ser utilizado.

Como se ha mencionado, cualquier uso de la lista de materiales UTF (Byte Order Mark) para determinar si una cadena es UTF-8 o no está educado conjeturas. Si hay metadatos disponibles adecuada (como charset="utf-8"), entonces ya sabe lo que se supone que el uso, pero por lo demás tendrá que probar y hacer algunas suposiciones. Esto implica comprobar si el archivo de una cadena proviene comienza con el código de bytes hexadecimal, EF BB BF.

Si se encuentra un código de bytes que corresponde a la BOM UTF-8, la probabilidad es lo suficientemente alta como para asumir que es UTF-8 y se puede ir desde allí. Cuando se ven obligados a hacer esta suposición, sin embargo, comprobación de errores adicional, mientras que la lectura todavía sería una buena idea en caso de que algo salga ilegible. Sólo se debe asumir una lista de materiales no es UTF-8 (es decir latino-1 o ANSI) si la entrada definitivamente no debe ser UTF-8 sobre la base de su fuente. Si no hay una lista de materiales, sin embargo, sólo tiene que determinar si se supone que debe ser UTF-8 mediante la validación en contra de la codificación.

¿Por qué no se recomienda una lista de materiales?

  1. El software no compatibles con Unicode o mal adaptable puede asumir que es latino-1 o ANSI y no se tira de la lista de materiales de la cadena, que, obviamente, puede causar problemas.
  2. No es realmente necesario (solo comprobar si el contenido es compatible y utilizar UTF-8 como el retorno cuando ninguna codificación compatible se puede encontrar siempre)

Cuando debe que codificar con una lista de materiales?

Si no es capaz de grabar los metadatos de cualquier otra manera (a través de una etiqueta de conjunto de caracteres o un sistema de archivo meta), y los programas que se utilizan como listas de materiales, debe codificar con una lista de materiales. Esto es especialmente cierto en Windows donde nada sin una lista de materiales en general se supone que se utiliza una página de código heredado. La lista de materiales le dice a programas como Office que, sí, el texto en este archivo es Unicode; aquí está la codificación utilizada.

Cuando se llega a esto, los únicos archivos que siempre realmente tienen problemas con son CSV. Dependiendo del programa, o bien se debe, o no debe tener una lista de materiales. Por ejemplo, si está utilizando Excel 2007+ en Windows, debe ser codificado con una lista de materiales si desea abrirla sin problemas y no tener que recurrir a la importación de los datos.

UTF-8 con la lista de materiales sólo ayuda si el archivo en realidad contiene algunos caracteres no ASCII. Si se incluye y no hay ninguna, entonces posiblemente se romperá aplicaciones antiguas que de otro modo habrían interpretado el archivo como ASCII. Estas aplicaciones serán definitivamente fallar cuando se encuentran con un carácter no ASCII, así que en mi opinión, sólo hay que añadir la lista de materiales cuando el archivo se puede, y debe, ya no se puede interpretar como ASCII.

Edit: Sólo quiero dejar claro que yo prefiero no tener la lista de materiales, agregar en caso de algunos viejos se rompe basura sin ella, y sustituye a la aplicación heredada no es factible

.

No hacer nada espera una lista de materiales para UTF-8.

UTF-8 sin BOM no tiene ninguna lista de materiales, lo que no significa que sea mejor que UTF-8 con la lista de materiales, excepto cuando el consumidor del archivo tiene que saber (o se beneficiaría de saber) si el archivo es UTF 8-codificado o no.

La lista de materiales es generalmente útil para determinar el orden de bits de la codificación, lo cual no se requiere para la mayoría de los casos de uso.

Además, la lista de materiales puede ser innecesario ruido / dolor para aquellos consumidores que no saben o se preocupan por ella, y puede dar lugar a confusión en el usuario.

miro esto desde una perspectiva diferente. Creo UTF-8 con la lista de materiales es mejor , ya que proporciona más información sobre el archivo. Yo uso UTF-8 sin BOM sólo si me enfrento problemas.

Estoy utilizando varios idiomas (incluso cirílico ) en mis páginas desde hace mucho tiempo y cuando los archivos se guardan sin lista de materiales y les vuelva a abrir para editar con un editor (como cherouvim también tomó nota), algunos personajes están dañados.

Tenga en cuenta que Bloc de notas guarda automáticamente los archivos con una lista de materiales cuando se intenta guardar un archivo recién creado con codificación UTF-8.

Yo personalmente guardo lado del servidor archivos de secuencias de comandos (.asp, ini, .aspx) con la lista de materiales y archivos .html y sin BOM .

Cuando se desea mostrar información codificada en UTF-8 no puede hacer frente a los problemas. Declarar por ejemplo un documento HTML como UTF-8 y usted tendrá todo que se muestra en el navegador que está contenido en el cuerpo del documento.

Pero este no es el caso cuando tenemos texto, CSV y archivos XML, ya sea en Windows o Linux.

Por ejemplo, un archivo de texto en Windows o Linux, una de las cosas más fáciles de imaginar, no es UTF-8 (por lo general).

Guardar como XML y declararemos como UTF-8:

<?xml version="1.0" encoding="UTF-8"?>

No se visualizará (que no se puede leer) correctamente, incluso si es declarado como UTF-8.

Yo tenía una serie de datos que contienen las letras francesas, que necesitaba ser salvado como XML para la sindicación. Sin crear un archivo UTF-8 desde el principio (cambiando las opciones de IDE y "Crear nuevo archivo") o la adición de la lista de materiales en el principio del archivo

$file="\xEF\xBB\xBF".$string;

Yo no era capaz de salvar las letras francesas en un archivo XML.

Una diferencia práctica es que si se escribe un script de shell para Mac OS X y guardarlo como llanura UTF-8, obtendrá la respuesta:

#!/bin/bash: No such file or directory

en respuesta a la Especificación de la línea shebang shell que desea utilizar:

#!/bin/bash

Si guarda como UTF-8, sin lista de materiales (por ejemplo, en BBEdit ) todo estará también.

Como se mencionó anteriormente, UTF-8 con la lista de materiales puede causar problemas con software no BOM-conscientes (o compatible). Una vez editado archivos HTML codificados como UTF-8 + lista de materiales con el KompoZer , como una cliente requiere que WYSIWYG programa.

Invariablemente, la disposición podría destruirse cuando se guarda. Se llevó mi tiempo para violín mi forma de evitar esto. Estos archivos se trabajaron bien en Firefox, pero mostraron una peculiaridad CSS en Internet Explorer destrucción de la disposición, de nuevo. Después de tocar el violín con los archivos CSS vinculados durante horas en vano he descubierto que Internet Explorer no le gustaba el archivo HTML BOMfed. Nunca más.

Además, acabo de encontrar esto en Wikipedia:

  

Los personajes shebang están representadas por los mismos dos bytes de codificaciones ASCII extendidos, incluyendo UTF-8, que se utiliza comúnmente para las secuencias de comandos y otros archivos de texto en los actuales sistemas de tipo Unix. Sin embargo, UTF-8 archivos pueden empezar con una marca de orden de bytes opcional (BOM); si la función "exec" detecta específicamente los bytes 0x23 0x21, entonces la presencia de la lista de materiales (0xEF 0xBB 0xBF) antes de la shebang impedirá que el intérprete de guión de ser ejecutado. Algunas autoridades recomiendan no usar la marca de orden de bytes en secuencias de comandos POSIX (Unix), [15] por esta razón y para la interoperabilidad más amplio y preocupaciones filosóficas

El Byte marca de orden FAQ Unicode (BOM) proporciona una respuesta concisa :

  

Q: ¿Cómo debo tratar con listas de materiales

     

R: Aquí hay algunas pautas a seguir:

     
      
  1. A protocolo particular (por ejemplo, las convenciones de Microsoft para archivos .txt) pueden requerir el uso de la lista de materiales en ciertas corrientes de datos Unicode, tales como   archivos. Cuando tenga que ajustarse a un protocolo de este tipo, utilice una lista de materiales.

  2.   
  3. Algunos protocolos permiten listas de materiales opcionales en el caso de texto sin etiqueta. En esos casos,

         
        
    • Cuando un flujo de datos de texto es conocido por ser texto sin formato, pero de codificación desconocido, BOM se puede utilizar como una firma. Si no hay una lista de materiales,   la codificación podría ser cualquier cosa.

    •   
    • Cuando un flujo de datos de texto es conocido por ser texto sin formato Unicode (pero no que endian), entonces la lista de materiales se puede utilizar como una firma. Sí hay   Se ninguna lista de materiales, el texto debe ser interpretado como big-endian.

    •   
  4.   
  5. Algunos protocolos orientados a bytes esperan caracteres ASCII en el comienzo de un archivo. Si UTF-8 se utiliza con estos protocolos, el uso de la   BOM como forma de codificación de la firma debe ser evitado.

  6.   
  7. Cuando se conoce el tipo exacto de la corriente de datos (por ejemplo Unicode big-endian o Unicode poco-endian), la lista de materiales no debe ser utilizado. En   en particular, cada vez que un flujo de datos es declarado ser UTF-16BE,   UTF-16LE, UTF-32BE o UTF-32LE una lista de materiales no debe ser utilizado.

  8.   

http://en.wikipedia.org/wiki/Byte-order_mark:

  

La marca de orden de bytes (BOM) es un Unicode   carácter utilizado para indicar el   endianness (orden de bytes) de un archivo de texto   o arroyo. Su punto de código es U + FEFF.   BOM uso es opcional y, si se utiliza,   debe aparecer al inicio del texto   corriente. Más allá de su uso específico como una   indicador de orden de bytes, la lista de materiales   personaje también puede indicar cuál de   las varias representaciones Unicode   el texto se codifica en.

Siempre utilizando una lista de materiales en su archivo se asegurará de que siempre se abre correctamente en un editor que soporta UTF-8 y lista de materiales.

Mi verdadero problema con la ausencia de lista de materiales es el siguiente. Supongamos que tenemos un archivo que contiene:

abc

Sin BOM esto abre como ANSI en la mayoría de los editores. Por lo que otro usuario de este archivo se abre y añade algunos caracteres nativos, por ejemplo:

abg-αβγ

Vaya ... Ahora el archivo está todavía en ANSI y adivina qué, "αβγ" no ocupa 6 bytes, pero 3. Esto no es UTF-8 y esto provoca otros problemas más adelante en la cadena de desarrollo.

Aquí está mi experiencia con las solicitudes de Visual Studio, SourceTree y Bitbucket de tracción, lo que me ha estado dando algunos problemas:

Así resulta que la lista de materiales con la firma incluirá un carácter de punto rojo en cada archivo en la revisión de una solicitud de extracción (puede ser bastante molesto).

introducir descripción de la imagen aquí

Si pasa sobre ella, se mostrará un personaje como "ufeff", pero resulta SourceTree no muestra estos tipos de bytemarks, por lo que muy probablemente va a terminar en sus solicitudes de extracción, que debe estar bien porque así es como VS 2017 codificar los nuevos archivos ahora, así que tal vez bitbucket debe ignorar esto o hacer que se muestre de otra manera, más información aquí:

rojas diff Bitbucket marcadores dot ver

UTF con lista de materiales es mejor si se utiliza UTF-8 en archivos HTML, si se utiliza cirílico serbio, serbio latino,, exótico lenguaje húngaro o algo alemana en la misma página. Esa es mi opinión (30 años de la informática y la industria de TI).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top