86 votes

J'ai ouvert une image JPG avec le bloc-notes, j'ai collé tout le "texte" dans un nouveau fichier du bloc-notes, j'ai changé le format en .JPG et il ne s'ouvre plus. Pourquoi ?

Ce phénomène m'a laissé des questions à poser.

Voici l'expérience détaillée, mon OS est Windows 7 x64 SP1 :

  • J'ai transformé un fichier image (JPG) en TXT en changeant simplement son extension (ou on pourrait choisir d'ouvrir le JPG avec le bloc-notes, même chose).

Il devrait ressembler à ceci, des séquences de textes à l'aspect étrange, et certaines d'entre elles (très rares) sont réellement significatives, comme dans la capture d'écran ci-dessous "creator : dg-jpeg v1.0...".

Sample JPG text

  • J'ai désactivé l'habillage et sélectionné tout le texte en utilisant Ctrl+A (pour être sûr de ne rien oublier).
  • J'ai collé le texte copié dans un autre fichier TXT vierge et l'ai enregistré en tant que JPG, j'ai comparé la taille du nouveau fichier avec le JPG original. Tous (le JPG original, le fichier TXT converti et le fichier TXT nouvellement créé) sont de la taille de exact de même taille, en octets.

Quand j'ai essayé d'ouvrir, Windows disait "Windows Photo Viewer ne peut pas ouvrir cette image car le fichier semble être endommagé, corrompu ou trop volumineux" .

J'ai même essayé de le tester en utilisant une autre méthode : J'ai ouvert le JPG avec notepad, j'ai coupé ONE à partir d'un emplacement facile à mémoriser (comme le premier caractère de la deuxième ligne), puis enregistrez le fichier. Le visualiseur affichait bien sûr le même message. Je l'ai ensuite ouvert à nouveau et j'ai collé le caractère dans le champ EXACT l'emplacement (Notepad se souvient de l'état dans lequel il a quitté le système, comme la position de Windows, l'habillage, la taille des polices, etc.)

Et toujours la même erreur. Vous pouvez essayer ceci pour vous faire une idée, n'oubliez pas de choisir une petite image sinon Notepad se comportera comme un vieil homme rouillé.

Quelle a pu être la cause de ce phénomène ?

83voto

mangper Points 856

Selon l'encodage utilisé pour ouvrir le fichier, le comportement peut être différent. Mon bloc-notes Windows 7 permet d'ouvrir un fichier en ANSI, UTF-8, Unicode ou Unicode big endian.

J'ai testé ce problème avec une petite image jpeg de 2x2 pixels créée avec gimp et en ouvrant et sauvegardant le fichier image avec un encodage ANSI. En ouvrant l'image originale et l'image sauvegardée avec un éditeur hexadécimal, je constate que toutes les séquences 00 (deux chiffres hexadécimaux, Caractère de contrôle NUL ) ont été convertis en 20 (caractère d'espacement).

En remplaçant dans l'éditeur hexagonal tous les 20 par 00, on rétablit le format de l'image.

J'ai fait quelques recherches sur Internet et je n'ai trouvé aucune référence expliquant pourquoi il fait cela. Seulement une référence à un article qui met en garde contre ce problème (lien google cache, la page n'est pas disponible).

Si vous enregistrez/ouvrez le fichier en UTF-8, il semble qu'il convertit toujours les caractères NUL en espaces, mais il augmente également la taille du fichier résultant en raison des conversions de caractères à un octet en séquences multi-octets UTF-8.

Si vous enregistrez/ouvrez le fichier en tant qu'Unicode, il semble qu'il convertisse toujours les caractères NUL en espaces mais ajoute également un octet au début du fichier, l'octet NOMENCLATURE .

28voto

JohnC Points 671

Le Bloc-notes ne conserve pas tous les caractères spéciaux/étendus exactement tels qu'ils sont. Je n'ai pas de référence pour ce comportement sous la main, mais j'ai constaté que c'est le cas, par exemple, pour les fins de ligne LF de style UNIX que Notepad convertit en CRLF et en null (0x00) qu'il ignore. Dans un fichier binaire tel qu'un JPG, il peut y avoir des occurrences aléatoires du ou des caractères que Notepad ne conserve pas. Essayez votre expérience avec un éditeur prenant en compte les HEX et cela devrait fonctionner. Je mettrai à jour ma réponse si je trouve une bonne référence et une fois que j'aurai testé un éditeur HEX.

Mise à jour : J'ai essayé quelques éditeurs de programmes bien connus mais un seul d'entre eux a fonctionné dès le départ, HxD par Maël Hörz . Je n'avais jamais utilisé HxD auparavant mais je l'ai découvert grâce à une réponse à cet article de Stack, Un module externe de visualisation et d'édition hexagonale pour Notepad++. .

Les autres éditeurs qui n'ont pas fonctionné après quelques minutes d'effort sont Notepad++, Notepad2 et UltraEdit (v17.3, ancienne version). Quelques-uns d'entre eux ont eu des problèmes avec le copier/coller des premiers octets, le fichier JPEG et l'image. signature du fichier numéro magique FF D8 FF. Peut-être qu'ils fonctionneraient avec un peu plus de bricolage que ce que j'ai le temps de faire actuellement.

6voto

CJ Dennis Points 919

Vous pouviez faire ça avec Write à l'époque. C'était un programme standard dans Windows 3.1 mais je ne me souviens pas si Windows 95 l'incluait. Write permettait d'éditer en mode binaire tout fichier qu'il pouvait ouvrir (la taille des fichiers étant probablement très limitée). Le Bloc-notes n'est certainement pas sûr du point de vue binaire (le texte reste le même mais les octets réels des caractères non textuels [par exemple les codes de contrôle] peuvent changer), ce qui explique pourquoi votre exemple JPG ne fonctionne pas. Essayez d'obtenir une copie de Write (et un très vieux Windows) et tentez à nouveau votre expérience !

Según Article "Windows Write" de Wikipédia Write était inclus jusqu'à Windows NT 3.5. Il a été remplacé par Wordpad à partir de Windows 95. write.exe était toujours présent dans le répertoire Windows mais n'était qu'une enveloppe pour ouvrir Wordpad.

5voto

Unirgy Points 326

Je pense que ce n'est pas tant un problème d'encodage que de jeu de caractères. Le format JPG est fondamentalement un flux d'octets. Il autorise donc les caractères non imprimables comme NUL, ETX, STX, SOH, DLE, etc.

Le Bloc-notes de Microsoft ne peut pas afficher ces caractères non imprimables. Il peut afficher des caractères de remplacement, comme un espace pour un caractère nul. Ainsi, l'ouverture du fichier avec le Bloc-notes n'affiche pas le contenu réel mais le contenu décodé par l'encodage sélectionné (utf-8, utf-16, etc.) et affiché par un certain jeu de caractères (unicode, ascii, etc.) à l'exclusion des caractères non imprimables.

Lorsque vous sélectionnez tout le texte affiché et que vous copiez le texte dans le presse-papiers, vous ne copiez que les caractères imprimables, y compris les caractères génériques. Ainsi, les caractères nuls sont automatiquement convertis en espaces et les autres caractères non imprimables sont entièrement ignorés.

Donc, en gros, vous perdez du contenu en procédant de cette façon. Si vous utilisez un éditeur hexagonal à la place, il copiera entièrement le contenu.


Mise à jour : La réponse de Bhathiya Pereras est juste : https://superuser.com/a/782885/322784 Les caractères non imprimables ne sont pas ignorés lors de la copie de texte dans le presse-papiers.

2voto

Dice9 Points 191

Le fichier JPEG contient des données non textuelles, à l'exception de certains champs. En fait, on trouvera n'importe quelle valeur d'octet entre 0 et 255, surtout dans la zone représentant l'image compressée codée qui contient des données presque pseudo-aléatoires.

Mais Notepad traitera les données comme du texte ANSI par défaut, et fera donc diverses choses qui altéreront les données originales, comme :

  • remplacer les octets correspondant aux caractères spéciaux / indéfinis / interdits car ils n'ont pas de sens pour un texte ANSI valide

  • réencoder les caractères nuls, les séquences de fin de ligne et de fin de fichier selon les conventions Windows/DOS

Ce qui signifie que si vous modifiez et enregistrez les données en tant que texte, cela modifiera le jpeg dans le meilleur des cas, et le rendra inutilisable dans le pire des cas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X