Par exemple, j'ai un fichier f.txt sur mon Mac. Le système est codé en utf-8
Il contient les données "xE6x97A5" - le caractère chinois "日" en utf-8.
Le contenu réellement stocké est "xE6x97A5". Si ultraedit l'interprète comme un encodage gb18030, il sera affiché sous forme de caractères tronqués sur l'interface ultraedit. Après cela, il a été enregistré en tant que fichier codé gb18030, mais lorsqu'il a été ouvert sur le système Mac, il était en UTF-8 et l'affichage était normal.
Le contenu réellement stocké est "xE6x97A5", qui est interprété comme utf-8, puis il est affiché comme "日"
Enregistrez directement sous l'encodage gb18030, puis ultraedit modifiera automatiquement l'encodage, c'est-à-dire remplacera "xE6x97A5" par "xC8xD5". Ensuite, vim ouvre le fichier et appelle l'interprétation du codage ascii.
Puisque les données réellement stockées sont "xE6x97A5", pourquoi mon éditeur les interprète-t-il comme un encodage utf-8 ? Que dois-je faire si je souhaite que le code tronqué soit expliqué par GBK ?
Est-ce que cela ajoute une sorte de balise à l'en-tête binaire du document ? Si oui, comment afficher cette balise ?
L'analyse sémantique basée sur le codage est-elle effectuée du côté de l'éditeur ?
Prenons vim par exemple
Un fichier texte, vim l'ouvre selon un certain encodage A lors de son ouverture, le convertit en un certain encodage B, puis le convertit en un autre encodage C lors de l'enregistrement. D'autres éditeurs de texte peuvent ne pas exister de tels paramètres et. complétion automatique en tant que vim.
Encodage B : Il n'a aucun effet sur l'ensemble du fichier, mais est lié à l'affichage. C'est l'encodage utilisé lorsque vim interagit avec le système d'exploitation.
Encodage A
: utilisezset fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1
pour définir. vim vérifie l'encodage des fichiers de détection dans l'ordre défini. Parce que certaines combinaisons de séquences binaires n'existent pas dans certains encodages, si elle est détectée, on considère qu'il ne s'agit pas de cet encodage, et l'on vérifie l'encodage suivant, sinon on considère qu'il s'agit de celui-ci. Parce quelatin-1
peut apparaître dans n'importe quelle combinaison de séquences binaires, s'il est placé en premier, il sera toujours affiché commelatin-1
.编码A
:使用set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1
设置。vim 按照设置的顺序检查检测文件的编码。因为某些编码里不存在某些二进制序列的组合,所以如果检测到就认为不是这种编码,检查下一种编码,否则就认为是这一种。因为latin-1
可以出现任何二进制序列的组合,所以如果放到第一个,那么将永远以latin-1
显示。在一般的二进制文件里是不存在字符编码的标记的。但是Unicode里面有个特殊叫做零宽度空格(
FEFF
)而FFFE
是不存在的编码,所以在Unicode的标准里可以人为的在开始加入这个字符(这个字符在任何字体下都是没有宽度的,在中文字符里面没有任何的效果跟没有一样,是为了照顾东南亚某些语言的显示而设置的)。这样就便于文本编辑器检查字符和字节顺序,但是在代码里include
这种文件经常会出问题(这可是个大坑,编译器会认为这是一个非法字符,可是你又看不到)。
Il n'y a pas de marque de codage de caractères dans les fichiers binaires ordinaires. Cependant, il existe un caractère spécial dans Unicode appelé espace de largeur nulle (编码B
:set fileencoding=utf-8
FEFF
) etFFFE
est un encodage inexistant, donc dans la norme Unicode, ce caractère peut être ajouté artificiellement au début (Ce caractère n'a aucune largeur dans aucune police et n'a aucun effet sur les caractères chinois. Il est configuré pour prendre en charge l'affichage de certaines langues d'Asie du Sud-Est). Cela permet à l'éditeur de texte de vérifier plus facilement les caractères et l'ordre des octets, mais les fichiers commeinclude
causent souvent des problèmes dans le code (c'est un gros piège, le compilateur pensera que c'est un caractère illégal, mais Vous ne pouvez pas le voir).Encodage B
:set fileencoding=utf-8
, l'encodage utilisé lors de l'enregistrement, automatiquement converti en un autre encodage lors de l'enregistrement. Mais si un mauvais encodage est reconnu lors de la première ouverture, un caractère inexistant ne sera pas complètement converti lorsque vous le convertirez.L'encodage du fichier est la spécification réelle du code sur la façon de le stocker. Tout d'abord, pour répondre à votre question, l'encodage
日
enUTF8
estxE6x97A5. Il vous est impossible de dire que le résultat de l'encodage de l'utilisation de
GB18030
est toujours le caractère日
dexE6x97A5
.日
在UTF8
编码中是xE6x97A5
,你就不可能说采用GB18030
编码结果还为xE6x97A5
的日
字。编辑器识别文本文件编码有不同的方式,有的文件编码带有
Il existe différentes manières pour les éditeurs d'identifier les encodages de fichiers texte. Certains encodages de fichiers ont un en-têteMagic
Magic
, qui peut être complété en identifiant directement les premiers octets. Cependant, la plupart des fichiers texte n'en ont pas. le code d'identification est entièrement deviné par l'éditeur en fonction du contexte et des paramètres régionaux de l'utilisateur. 🎜