Quelle est la différence entre UTF-8 et UTF-8 sans nomenclature ? Ce qui est mieux?
Quelle est la différence entre UTF-8 et UTF-8 sans nomenclature ? Ce qui est mieux?
Réponses:
La nomenclature UTF-8 est une séquence d' octets au début d'un flux de texte ( 0xEF, 0xBB, 0xBF
) qui permet au lecteur de deviner de manière plus fiable un fichier comme étant codé en UTF-8.
Normalement, la nomenclature est utilisée pour signaler l' endianité d'un codage, mais comme l'endianité n'est pas pertinente pour UTF-8, la nomenclature est inutile.
Selon le norme Unicode , la nomenclature des fichiers UTF-8 n'est pas recommandée :
2.6 Schémas d'encodage
... L'utilisation d'une nomenclature n'est ni requise ni recommandée pour UTF-8, mais peut être rencontrée dans des contextes où les données UTF-8 sont converties à partir d'autres formes de codage qui utilisent une nomenclature ou lorsque la nomenclature est utilisée comme signature UTF-8 . Voir la sous-section «Byte Order Mark» de la Section 16.8, Specials , pour plus d'informations.
Les autres excellentes réponses ont déjà répondu que:
EF BB BF
Mais, comme information supplémentaire à cela, la nomenclature pour UTF-8 pourrait être un bon moyen de "sentir" si une chaîne était encodée en UTF-8 ... Ou elle pourrait être une chaîne légitime dans tout autre encodage ...
Par exemple, les données [EF BB BF 41 42 43] peuvent être soit:
Donc, même s'il peut être cool de reconnaître l'encodage d'un contenu de fichier en regardant les premiers octets, vous ne devriez pas vous y fier, comme le montre l'exemple ci-dessus
Les encodages doivent être connus et non divins.
Il y a au moins trois problèmes avec la mise en place d'une nomenclature dans des fichiers encodés UTF-8.
Et, comme d'autres l'ont mentionné, il n'est ni suffisant ni nécessaire d'avoir une nomenclature pour détecter que quelque chose est UTF-8:
cat
ne vous donnera pas un résultat net , un résultat qui n'a de nomenclature qu'au début. Si vous vouliez dire cela, c'est parce que cela cat
fonctionne au niveau des octets, pas au niveau du contenu interprété, et de la même manière cat
ne peut pas traiter des photographies, par exemple. Pourtant, cela ne fait pas beaucoup de mal. En effet, la nomenclature code un espace insécable de largeur nulle.
Voici des exemples d'utilisation de la nomenclature qui causent réellement de vrais problèmes et pourtant, beaucoup de gens ne le savent pas.
Scripts Shell, scripts Perl, scripts Python, scripts Ruby, scripts Node.js ou tout autre exécutable qui doit être exécuté par un interprète - tout commence par une ligne shebang qui ressemble à l'une de celles-ci:
#!/bin/sh
#!/usr/bin/python
#!/usr/local/bin/perl
#!/usr/bin/env node
Il indique au système quel interpréteur doit être exécuté lors de l'appel d'un tel script. Si le script est encodé en UTF-8, on peut être tenté d'inclure une nomenclature au début. Mais en fait, le "#!" les personnages ne sont pas seulement des personnages. Il s'agit en fait d'un nombre magique qui se trouve être composé de deux caractères ASCII. Si vous mettez quelque chose (comme une nomenclature) avant ces caractères, le fichier ressemblera à un numéro magique différent et cela peut entraîner des problèmes.
Voir Wikipedia, article: Shebang, section: Nombre magique :
Les caractères shebang sont représentés par les deux mêmes octets dans les codages ASCII étendus, y compris UTF-8, qui est couramment utilisé pour les scripts et autres fichiers texte sur les systèmes actuels de type Unix. Cependant, les fichiers UTF-8 peuvent commencer par la marque d'ordre des octets facultative (BOM); si la fonction "exec" détecte spécifiquement les octets 0x23 et 0x21, alors la présence de la nomenclature (0xEF 0xBB 0xBF) avant le shebang empêchera l'exécution de l'interpréteur de script.Certaines autorités déconseillent d'utiliser la marque d'ordre des octets dans les scripts POSIX (de type Unix), [14] pour cette raison et pour une plus grande interopérabilité et des préoccupations philosophiques. De plus, une marque d'ordre d'octets n'est pas nécessaire en UTF-8, car ce codage n'a pas de problèmes d'endianité; il sert uniquement à identifier l'encodage comme UTF-8. [non souligné dans l'original]
Voir RFC 7159, section 8.1 :
Les implémentations NE DOIVENT PAS ajouter de marque d'ordre d'octets au début d'un texte JSON.
Non seulement il est illégal dans JSON, mais il n'est pas non plus nécessaire de déterminer l'encodage des caractères car il existe des moyens plus fiables pour déterminer sans ambiguïté à la fois l'encodage des caractères et l'endianness utilisés dans n'importe quel flux JSON (voir cette réponse pour plus de détails).
Non seulement il est illégal dans JSON et non nécessaire , il casse en fait tous les logiciels qui déterminent l'encodage en utilisant la méthode présentée dans RFC 4627 :
Détermination du codage et de l'endianité de JSON, examen des quatre premiers octets pour l'octet 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
Maintenant, si le fichier commence par BOM, il ressemblera à ceci:
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
Notez que:
Selon l'implémentation, tous ceux-ci peuvent être interprétés de manière incorrecte comme UTF-8, puis mal interprétés ou rejetés comme UTF-8 non valides, ou ne pas être reconnus du tout.
De plus, si l'implémentation teste un JSON valide comme je le recommande, elle rejettera même l'entrée qui est en effet encodée en UTF-8, car elle ne commence pas par un caractère ASCII <128 comme il se doit selon la RFC.
La nomenclature dans JSON n'est pas nécessaire, est illégale et casse un logiciel qui fonctionne correctement selon la RFC. Cela devrait être un nobrainer de ne pas l'utiliser à ce moment-là et pourtant, il y a toujours des gens qui insistent pour casser JSON en utilisant des nomenclatures, des commentaires, différentes règles de citation ou différents types de données. Bien sûr, tout le monde est libre d'utiliser des choses comme les nomenclatures ou autre chose si vous en avez besoin - ne l'appelez pas JSON alors.
Pour d'autres formats de données que JSON, regardez à quoi il ressemble vraiment. Si les seuls encodages sont UTF- * et que le premier caractère doit être un caractère ASCII inférieur à 128, vous disposez déjà de toutes les informations nécessaires pour déterminer à la fois l'encodage et l'endianité de vos données. L'ajout de nomenclatures même en tant que fonctionnalité facultative ne ferait que le rendre plus compliqué et sujet aux erreurs.
Quant aux utilisations en dehors de JSON ou de scripts, je pense qu'il y a déjà de très bonnes réponses ici. Je voulais ajouter des informations plus détaillées sur les scripts et la sérialisation, car il s'agit d'un exemple de caractères de nomenclature causant de réels problèmes.
Quelle est la différence entre UTF-8 et UTF-8 sans nomenclature?
Réponse courte: en UTF-8, une nomenclature est codée en octets EF BB BF
au début du fichier.
Longue réponse:
À l'origine, il était prévu que Unicode soit codé en UTF-16 / UCS-2. La nomenclature a été conçue pour cette forme d'encodage. Lorsque vous avez des unités de code à 2 octets, il est nécessaire d'indiquer l'ordre dans lequel ces deux octets sont, et une convention courante pour ce faire est d'inclure le caractère U + FEFF en tant que "marque d'ordre des octets" au début des données. Le caractère U + FFFE n'est pas affecté de façon permanente de sorte que sa présence peut être utilisée pour détecter le mauvais ordre d'octets.
UTF-8 a le même ordre d'octets indépendamment de l'endianité de la plateforme, donc une marque d'ordre d'octets n'est pas nécessaire. Cependant, cela peut se produire (comme la séquence d'octets EF BB FF
) dans les données qui ont été converties en UTF-8 à partir d'UTF-16, ou comme une "signature" pour indiquer que les données sont UTF-8.
Ce qui est mieux?
Sans pour autant. Comme Martin Cote a répondu, la norme Unicode ne le recommande pas. Cela provoque des problèmes avec les logiciels non compatibles avec la nomenclature.
Une meilleure façon de détecter si un fichier est UTF-8 est d'effectuer un contrôle de validité. UTF-8 a des règles strictes sur les séquences d'octets valides, donc la probabilité d'un faux positif est négligeable. Si une séquence d'octets ressemble à UTF-8, c'est probablement le cas.
sh
, perl
, g++
et beaucoup d' autres outils gratuits et puissants. Vous voulez que les choses fonctionnent? Achetez simplement les versions MS. MS a créé le problème spécifique à la plate-forme, tout comme le désastre de leur gamme \ x80- \ x95.
UTF-8 avec BOM est mieux identifié. J'ai atteint cette conclusion à la dure. Je travaille sur un projet dont l'un des résultats est un fichier CSV , comprenant des caractères Unicode.
Si le fichier CSV est enregistré sans nomenclature, Excel pense que c'est ANSI et affiche du charabia. Une fois que vous ajoutez "EF BB BF" à l'avant (par exemple, en le réenregistrant à l'aide du Bloc-notes avec UTF-8; ou Notepad ++ avec UTF-8 avec BOM), Excel l'ouvre correctement.
La pré-extension du caractère BOM aux fichiers texte Unicode est recommandée par la RFC 3629: "UTF-8, un format de transformation ISO 10646", novembre 2003 sur http://tools.ietf.org/html/rfc3629 (ces dernières informations se trouvent sur: http://www.herongyang.com/Unicode/Notepad-Byte-Order-Mark-BOM-FEFF-EFBBBF.html )
La nomenclature a tendance à exploser (sans jeu de mots (sic)) quelque part, quelque part. Et quand il explose (par exemple, n'est pas reconnu par les navigateurs, les éditeurs, etc.), il apparaît comme les caractères étranges 
au début du document (par exemple, fichier HTML, réponse JSON , RSS , etc.) et provoque le genre d'embarras comme le récent problème d'encodage rencontré lors de la conférence d'Obama sur Twitter .
C'est très ennuyeux quand il apparaît à des endroits difficiles à déboguer ou lorsque les tests sont négligés. Il est donc préférable de l'éviter, sauf si vous devez l'utiliser.
Question: Quelle est la différence entre UTF-8 et UTF-8 sans nomenclature? Ce qui est mieux?
Voici quelques extraits de l'article de Wikipedia sur la marque d'ordre des octets (BOM) qui, je crois, offrent une réponse solide à cette question.
Sur la signification de la nomenclature et de l'UTF-8:
La norme Unicode permet la nomenclature en UTF-8 , mais ne requiert ni ne recommande son utilisation. L'ordre des octets n'a pas de sens en UTF-8, donc sa seule utilisation en UTF-8 est de signaler au début que le flux de texte est codé en UTF-8.
Argument pour NE PAS utiliser de nomenclature:
La principale motivation pour ne pas utiliser de nomenclature est la rétrocompatibilité avec un logiciel qui n'est pas compatible Unicode ... Une autre motivation pour ne pas utiliser de nomenclature est d'encourager UTF-8 comme encodage "par défaut".
Argument POUR utiliser une nomenclature:
L'argument en faveur de l'utilisation d'une nomenclature est que sans elle, une analyse heuristique est nécessaire pour déterminer quel caractère codant un fichier utilise. Historiquement, une telle analyse, pour distinguer divers codages 8 bits, est compliquée, sujette aux erreurs et parfois lente. Un certain nombre de bibliothèques sont disponibles pour faciliter la tâche, comme le détecteur de charset universel Mozilla et les composants internationaux pour Unicode.
Les programmeurs supposent à tort que la détection de l'UTF-8 est également difficile (ce n'est pas à cause de la grande majorité des séquences d'octets UTF-8 invalides, tandis que les encodages que ces bibliothèques tentent de distinguer autorisent toutes les séquences d'octets possibles). Par conséquent, tous les programmes compatibles Unicode n'effectuent pas une telle analyse et s'appuient plutôt sur la nomenclature.
En particulier, les compilateurs et interprètes Microsoft et de nombreux logiciels sous Microsoft Windows tels que le Bloc-notes ne liront pas correctement le texte UTF-8, sauf s'il ne contient que des caractères ASCII ou s'il commence par la nomenclature, et ajoutera une nomenclature au début lors de l'enregistrement texte en UTF-8. Google Docs ajoutera une nomenclature lorsqu'un document Microsoft Word est téléchargé en tant que fichier texte brut.
Sur quel est le meilleur, AVEC ou SANS la nomenclature:
L' IETF recommande que si un protocole (a) utilise toujours UTF-8, ou (b) a une autre manière d'indiquer quel codage est utilisé, alors il "DEVRAIT interdire l'utilisation de U + FEFF comme signature."
Ma conclusion:
N'utilisez la nomenclature que si la compatibilité avec une application logicielle est absolument essentielle.
Notez également que bien que l'article Wikipedia référencé indique que de nombreuses applications Microsoft s'appuient sur la nomenclature pour détecter correctement UTF-8, ce n'est pas le cas pour toutes les applications Microsoft. Par exemple, comme l'a souligné @barlop , lors de l'utilisation de l'invite de commandes Windows avec UTF-8 † , des commandes telles que type
et more
ne s'attendent pas à ce que la nomenclature soit présente. Si la nomenclature est présente, elle peut être problématique comme pour d'autres applications.
† La chcp
commande prend en charge UTF-8 ( sans la nomenclature) via la page de codes 65001 .
.htaccess
et gzip compression
en combinaison avec UTF-8 BOM donne une erreur d'encodage Changer en Encodage en UTF-8 sans BOM suivre une suggestion comme expliqué ici résoudre les problèmes
Cette question a déjà un million et une réponses et beaucoup d'entre elles sont assez bonnes, mais je voulais essayer de clarifier quand une nomenclature doit ou ne doit pas être utilisée.
Comme mentionné, toute utilisation de la nomenclature UTF (Byte Order Mark) pour déterminer si une chaîne est UTF-8 ou non est une supposition éclairée. Si des métadonnées appropriées sont disponibles (comme charset="utf-8"
), vous savez déjà ce que vous êtes censé utiliser, mais sinon vous devrez tester et faire des hypothèses. Cela implique de vérifier si le fichier dont provient une chaîne commence par le code octet hexadécimal, EF BB BF.
Si un code d'octet correspondant à la nomenclature UTF-8 est trouvé, la probabilité est suffisamment élevée pour supposer que c'est UTF-8 et vous pouvez y aller. Cependant, une fois obligé de faire cette supposition, une vérification d'erreur supplémentaire pendant la lecture serait toujours une bonne idée au cas où quelque chose se brouille. Vous ne devez supposer qu'une nomenclature n'est pas UTF-8 (c'est-à-dire latin-1 ou ANSI) si l'entrée ne doit certainement pas être UTF-8 en fonction de sa source. S'il n'y a pas de nomenclature, cependant, vous pouvez simplement déterminer s'il est censé être UTF-8 en validant par rapport au codage.
Si vous ne parvenez pas à enregistrer les métadonnées d'une autre manière (via une balise charset ou une méta du système de fichiers) et les programmes utilisés comme des nomenclatures, vous devez coder avec une nomenclature. Cela est particulièrement vrai sous Windows où tout élément sans nomenclature est généralement supposé utiliser une page de codes héritée. La nomenclature indique à des programmes comme Office que, oui, le texte de ce fichier est Unicode; voici l'encodage utilisé.
En fin de compte, les seuls fichiers avec lesquels j'ai vraiment eu des problèmes sont CSV. Selon le programme, il doit ou ne doit pas avoir de nomenclature. Par exemple, si vous utilisez Excel 2007+ sous Windows, il doit être codé avec une nomenclature si vous souhaitez l'ouvrir en douceur et ne pas avoir à recourir à l'importation des données.
Il convient de noter que pour certains fichiers, vous ne devez pas avoir la nomenclature même sous Windows. Les exemples sont SQL*plus
ou les VBScript
fichiers. Dans le cas où ces fichiers contiennent une nomenclature, vous obtenez une erreur lorsque vous essayez de les exécuter.
UTF-8 avec BOM n'est utile que si le fichier contient réellement des caractères non ASCII. S'il est inclus et qu'il n'y en a pas, cela cassera peut-être les applications plus anciennes qui auraient autrement interprété le fichier comme ASCII simple. Ces applications échoueront certainement lorsqu'elles rencontreront un caractère non ASCII, donc à mon avis, la nomenclature ne devrait être ajoutée que lorsque le fichier ne peut et ne doit plus être interprété comme du simple ASCII.
Je tiens à préciser que je préfère ne pas du tout avoir la nomenclature. Ajoutez-le si de vieilles ordures se cassent sans lui et remplacer cette application héritée n'est pas possible.
Ne vous attendez pas à une nomenclature pour UTF-8.
Cité au bas de la page Wikipedia sur BOM: http://en.wikipedia.org/wiki/Byte-order_mark#cite_note-2
"L'utilisation d'une nomenclature n'est ni requise ni recommandée pour UTF-8, mais peut être rencontrée dans des contextes où les données UTF-8 sont converties à partir d'autres formes de codage qui utilisent une nomenclature ou lorsque la nomenclature est utilisée comme signature UTF-8"
UTF-8 sans BOM n'a pas de BOM, ce qui ne le rend pas meilleur que UTF-8 avec BOM, sauf lorsque le consommateur du fichier a besoin de savoir (ou gagnerait à savoir) si le fichier est encodé en UTF-8 ou pas.
La nomenclature est généralement utile pour déterminer l'endianité du codage, ce qui n'est pas requis dans la plupart des cas d'utilisation.
En outre, la nomenclature peut être un bruit / une douleur inutile pour les consommateurs qui ne la connaissent pas ou s'en soucient, et peut entraîner une confusion chez l'utilisateur.
Je regarde cela sous un angle différent. Je pense que UTF-8 avec BOM est meilleur car il fournit plus d'informations sur le fichier. J'utilise UTF-8 sans BOM uniquement si je rencontre des problèmes.
J'utilise plusieurs langues (même cyrillique ) sur mes pages depuis longtemps et lorsque les fichiers sont enregistrés sans nomenclature et que je les rouvre pour les éditer avec un éditeur (comme cherouvim l'a également noté), certains caractères sont corrompus.
Notez que le Bloc-notes classique de Windows enregistre automatiquement les fichiers avec une nomenclature lorsque vous essayez d'enregistrer un fichier nouvellement créé avec le codage UTF-8.
Je sauvegarde personnellement les fichiers de script côté serveur (.asp, .ini, .aspx) avec les fichiers BOM et .html sans BOM .
chcp 65001
de support utf8, c'est utf8 sans bom. Si vous le faites, type myfile
il ne s'affichera correctement que s'il n'y a pas de nomenclature. Si vous faites echo aaa>a.a
ou echo אאא>a.a
pour sortir les caractères dans le fichier aa, et que vous avez chcp 65001, il sortira sans nomenclature.
Lorsque vous souhaitez afficher des informations encodées en UTF-8, vous ne pouvez pas rencontrer de problèmes. Déclarez par exemple un document HTML comme UTF-8 et vous aurez tout affiché dans votre navigateur qui est contenu dans le corps du document.
Mais ce n'est pas le cas lorsque nous avons des fichiers texte, CSV et XML, que ce soit sur Windows ou Linux.
Par exemple, un fichier texte sous Windows ou Linux, l'une des choses les plus faciles à imaginer, ce n'est pas (généralement) UTF-8.
Enregistrez-le en XML et déclarez-le en UTF-8:
<?xml version="1.0" encoding="UTF-8"?>
Il ne s'affichera pas (il ne sera pas lu) correctement, même s'il est déclaré UTF-8.
J'avais une chaîne de données contenant des lettres françaises, qui devaient être enregistrées au format XML pour la syndication. Sans créer un fichier UTF-8 depuis le tout début (changer les options dans IDE et "Créer un nouveau fichier") ou ajouter la nomenclature au début du fichier
$file="\xEF\xBB\xBF".$string;
Je n'ai pas pu enregistrer les lettres françaises dans un fichier XML.
Une différence pratique est que si vous écrivez un script shell pour Mac OS X et l'enregistrez au format UTF-8, vous obtiendrez la réponse:
#!/bin/bash: No such file or directory
en réponse à la ligne shebang spécifiant quel shell vous souhaitez utiliser:
#!/bin/bash
Si vous enregistrez au format UTF-8, aucune nomenclature (par exemple dans BBEdit ) ne sera parfaite.
Comme mentionné ci-dessus, UTF-8 avec BOM peut provoquer des problèmes avec des logiciels non compatibles avec BOM (ou compatibles). J'ai une fois édité des fichiers HTML encodés en UTF-8 + BOM avec le KompoZer basé sur Mozilla , en tant que client nécessitant ce programme WYSIWYG .
Invariablement, la mise en page serait détruite lors de l'enregistrement. Il m'a fallu un certain temps pour me débrouiller. Ces fichiers ont ensuite bien fonctionné dans Firefox, mais ont montré une bizarrerie CSS dans Internet Explorer détruisant à nouveau la mise en page. Après avoir manipulé les fichiers CSS liés pendant des heures en vain, j'ai découvert qu'Internet Explorer n'aimait pas le fichier HTML BOMfed. Plus jamais.
De plus, je viens de trouver cela sur Wikipedia:
Les caractères shebang sont représentés par les deux mêmes octets dans les codages ASCII étendus, y compris UTF-8, qui est couramment utilisé pour les scripts et autres fichiers texte sur les systèmes actuels de type Unix. Cependant, les fichiers UTF-8 peuvent commencer par la marque d'ordre des octets facultative (BOM); si la fonction "exec" détecte spécifiquement les octets 0x23 0x21, alors la présence de la nomenclature (0xEF 0xBB 0xBF) avant le shebang empêchera l'exécution de l'interpréteur de script. Certaines autorités déconseillent d'utiliser la marque d'ordre des octets dans les scripts POSIX (de type Unix), [15] pour cette raison et pour une interopérabilité et des préoccupations philosophiques plus larges.
La FAQ Unicode Byte Order Mark (BOM) fournit une réponse concise:
Q: Comment dois-je traiter les nomenclatures?
R: Voici quelques directives à suivre:
Un protocole particulier (par exemple les conventions Microsoft pour les fichiers .txt) peut nécessiter l'utilisation de la nomenclature sur certains flux de données Unicode, tels que les fichiers. Lorsque vous devez vous conformer à un tel protocole, utilisez une nomenclature.
Certains protocoles autorisent les nomenclatures facultatives dans le cas de texte non balisé. Dans ces cas,
Lorsqu'un flux de données texte est connu pour être du texte brut, mais d'un codage inconnu, la nomenclature peut être utilisée comme signature. S'il n'y a pas de nomenclature, le codage pourrait être n'importe quoi.
Lorsqu'un flux de données texte est connu pour être du texte Unicode simple (mais pas quel endian), alors la nomenclature peut être utilisée comme signature. S'il n'y a pas de nomenclature, le texte doit être interprété comme big-endian.
Certains protocoles orientés octets attendent des caractères ASCII au début d'un fichier. Si UTF-8 est utilisé avec ces protocoles, l'utilisation de la nomenclature comme signature de formulaire de codage doit être évitée.
Lorsque le type précis du flux de données est connu (par exemple, big-endian Unicode ou little-endian Unicode), la nomenclature ne doit pas être utilisée. En particulier, chaque fois qu'un flux de données est déclaré UTF-16BE, UTF-16LE, UTF-32BE ou UTF-32LE, une nomenclature ne doit pas être utilisée.
Depuis http://en.wikipedia.org/wiki/Byte-order_mark :
La marque d'ordre des octets (BOM) est un caractère Unicode utilisé pour signaler l'endianité (ordre des octets) d'un fichier texte ou d'un flux. Son point de code est U + FEFF. L'utilisation de la nomenclature est facultative et, si elle est utilisée, doit apparaître au début du flux de texte. Au-delà de son utilisation spécifique comme indicateur d'ordre des octets, le caractère BOM peut également indiquer dans laquelle des plusieurs représentations Unicode le texte est codé.
L'utilisation permanente d'une nomenclature dans votre fichier garantit qu'elle s'ouvre toujours correctement dans un éditeur prenant en charge UTF-8 et BOM.
Mon vrai problème avec l'absence de nomenclature est le suivant. Supposons que nous ayons un fichier contenant:
abc
Sans nomenclature, cela s'ouvre en tant qu'ANSI dans la plupart des éditeurs. Un autre utilisateur de ce fichier l'ouvre donc et ajoute quelques caractères natifs, par exemple:
abg-αβγ
Oups ... Maintenant, le fichier est toujours en ANSI et devinez quoi, "αβγ" n'occupe pas 6 octets, mais 3. Ce n'est pas UTF-8 et cela provoque d'autres problèmes plus tard dans la chaîne de développement.
Voici mon expérience avec Visual Studio, Sourcetree les demandes d'extraction de et Bitbucket, ce qui m'a posé quelques problèmes:
Il s'avère donc que la nomenclature avec une signature inclura un caractère point rouge sur chaque fichier lors de l'examen d'une demande d'extraction (cela peut être assez ennuyeux).
Si vous passez la souris dessus, il affichera un caractère comme "ufeff", mais il s'avère que Sourcetree n'affiche pas ces types de bytmarks, donc il se retrouvera très probablement dans vos requêtes de tirage, ce qui devrait être correct car c'est ainsi que Visual Studio 2017 encode de nouveaux fichiers maintenant, alors peut-être que Bitbucket devrait ignorer cela ou le faire apparaître d'une autre manière, plus d'informations ici:
UTF avec une nomenclature est préférable si vous utilisez UTF-8 dans des fichiers HTML et si vous utilisez le serbe cyrillique, le serbe latin, l'allemand, le hongrois ou une langue exotique sur la même page.
C'est mon avis (30 ans d'informatique et d'informatique).