Maison  >  Questions et réponses  >  le corps du texte

macos - Quel est le mécanisme d'encodage des fichiers?

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.

Ensuite, j'ai utilisé ultraedit pour enregistrer f.txt sous les fichiers suivants :

  1. Fichier f1.txt

    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.

  2. Fichier f2.txt

    Le contenu réellement stocké est "xE6x97A5", qui est interprété comme utf-8, puis il est affiché comme "日"

  3. Fichier f3.txt

    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.

Voici la question :

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 ?

怪我咯怪我咯2712 Il y a quelques jours681

répondre à tous(2)je répondrai

  • 迷茫

    迷茫2017-05-16 16:39:24

    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 : utilisez set 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 que latin-1 peut apparaître dans n'importe quelle combinaison de séquences binaires, s'il est placé en premier, il sera toujours affiché comme latin-1. 编码A:使用 set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1设置。vim 按照设置的顺序检查检测文件的编码。因为某些编码里不存在某些二进制序列的组合,所以如果检测到就认为不是这种编码,检查下一种编码,否则就认为是这一种。因为latin-1可以出现任何二进制序列的组合,所以如果放到第一个,那么将永远以latin-1显示。

    在一般的二进制文件里是不存在字符编码的标记的。但是Unicode里面有个特殊叫做零宽度空格(FEFF)而FFFE是不存在的编码,所以在Unicode的标准里可以人为的在开始加入这个字符(这个字符在任何字体下都是没有宽度的,在中文字符里面没有任何的效果跟没有一样,是为了照顾东南亚某些语言的显示而设置的)。这样就便于文本编辑器检查字符和字节顺序,但是在代码里include这种文件经常会出问题(这可是个大坑,编译器会认为这是一个非法字符,可是你又看不到)。

    编码Bset fileencoding=utf-8

    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 (FEFF) et FFFE 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 comme include 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.

    Donc, f1.txt enregistré sous gp18030 peut ne pas effectuer de conversion d'encodage. 🎜 🎜"La question est la suivante : je souhaite que les données réellement stockées soient "xE6x97A5", mais utilisez l'encodage gb18030 pour expliquer, comment procéder ?" Qu'est-ce que cela signifie ? 🎜

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-16 16:39:24

    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 en UTF8 est xE6x97A5. Il vous est impossible de dire que le résultat de l'encodage de l'utilisation de GB18030 est toujours le caractère de xE6x97A5. UTF8编码中是xE6x97A5,你就不可能说采用GB18030编码结果还为xE6x97A5字。

    编辑器识别文本文件编码有不同的方式,有的文件编码带有Magic

    Il existe différentes manières pour les éditeurs d'identifier les encodages de fichiers texte. Certains encodages de fichiers ont un en-tête 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. 🎜

    répondre
    0
  • Annulerrépondre