1 votes

Copier/coller à partir de documents (PDF, docx) - comportement bizarre des diacritiques

Lorsque je copie du texte à partir d'un PDF (Aperçu) ou d'un Docx (Pages) contenant des caractères tchèques, certains de ces caractères sont copiés avec leur accent "collé".

Pour rendre les choses encore plus bizarres, ce comportement est assez incohérent : Parfois "r" est bien copié, parfois non. De plus, il ne semble pas être lié à une police spécifique. Mais je pensez à Cela se produit plus souvent avec les polices qui ne sont pas natives pour OSX (comme Cambria, qui se trouve être la police par défaut de MS Office).

Screenshot from WordPress WYSYWIG textarea

Résultat de CMD+C pour "í" : "í"

Pourquoi cela se produit-il ?

Editar

  • OSX : 10.13.6 (bien que cela me soit arrivé sur des OS plus anciens et même sur d'autres machines)
  • apps, j'ai copié le texte à partir de : Aperçu (PDF), Pages (doc, docx)
  • applications, où j'ai collé le texte : n'importe quoi (de Sublime text à l'éditeur de texte dans StackExchange, voir ci-dessus)

J'ai également remarqué que cela se produit souvent à la fin des mots (voire à la fin des lignes). Je le confirmerai lorsque cela se reproduira, car ce comportement est très difficile à reproduire.

1voto

PATRY Points 3068

En ce qui concerne le copier/coller à partir de pdf, le traitement des caractères non ascii peut être bâclé par le processus particulier de création de pdf. Sans informations sur la façon dont vos fichiers pdf ont été générés, comme l'encodage et les polices utilisées, il est difficile de déterminer pourquoi les résultats ne sont pas corrects.

1voto

Geoff Nixon Points 3143

Ce à quoi vous avez affaire est un de la de nombreux symptômes de ce que je considère comme le fléau de l'existence de tout programmeur moderne : La normalisation Unicode et l'interchangeabilité des encodages de caractères.

On pourrait littéralement écrire un livre de 1000 pages sur l'histoire de ce chaos (et je ne serais pas surpris que quelqu'un l'ait déjà fait). Je vais donc me limiter à l'essentiel de ce que vous rencontrez ici (et je vais simplifier un peu à l'extrême), puis je vous donnerai quelques liens pour "aller plus loin".

Tout d'abord, vérifions que le menu de saisie se trouve dans la barre de menu : Dans les préférences système, ouvrez le volet des préférences du clavier et cochez la case sous "Sources d'entrée". Ensuite, à partir de cet élément de menu, ouvrez ce qui est maintenant appelé "Afficher les Emoji et les Symboles". En haut à gauche de la fenêtre, sélectionnez "Personnaliser la liste", allez dans "Tables de codes" et cochez "Unicode" et "ISO-8859-1". Nous allons faire un bref exposé, puis une démonstration.

Donc, une fois de plus, il s'agit de deux questions interdépendantes mais distinctes :

1. Codage des caractères

Je considère que c'est le Cause profonde de cette question particulière. Le problème est que Microsoft est réputé depuis des années pour ne pas bien gérer Unicode, car ses plates-formes ont plus ou moins continué à utiliser une ancienne mise en œuvre de jeux de caractères multilingues, connus sous le nom de "caractères larges", UCS-2 ou UTF-16. Ce système a été mis en œuvre il y a des années, à une époque où l'on pensait que 16 bits (pour représenter ~65 000 caractères) seraient suffisants pour coder tous les symboles dont nous aurions jamais besoin. Aujourd'hui, il existe 1 114 112 symboles Unicode normalisés.

Ainsi, aujourd'hui, la plupart des systèmes (et tout ce qui est Apple) utilisent un codage appelé UTF-8, un largeur variable le codage des caractères, où il n'y a pas de nombre fixe de bits pour coder un caractère donné. Cela lui permet d'être rétrocompatible avec l'ASCII et d'ajouter autant de nouveaux symboles et caractères qu'on le souhaite.

Ainsi, lorsque l'on copie du texte à l'intérieur et à l'extérieur de programmes qui utilisent un jeu de caractères différent (comme celui de Microsoft), le jeu de caractères doit être entièrement ré-encodé et converti, un processus traditionnellement connu sous le nom de "conversion". iconv Il existe cependant des dizaines d'implémentations de cette méthode.

2. Caractères combinés Unicode

Pour compliquer le problème des encodages, la norme Unicode a évolué au fil des ans et s'est rendu compte qu'afin de limiter le nombre de caractères uniques à des millions, plutôt qu'à des milliards, il serait préférable que certains caractères soient des "caractères combinés", c'est-à-dire des caractères qui modifient le précédent de manière régulière. De cette manière, il n'est pas nécessaire de créer une entrée distincte pour chaque lettre avec chaque variante d'accent, il suffit d'ajouter un caractère d'accent "partagé" au caractère original. Mais cela n'a pas toujours été fait de cette manière, il existe donc plusieurs façons de produire le même symbole. Le vôtre en est le parfait exemple.


Nous commençons par le symbole LETTRE MINUSCULE LATINE I (U+0069) :

i

Maintenant, quand vous voulez ajouter l'accent aigu, Microsoft remplace avec

LETTRE MINUSCULE LATINE I AVEC ACCENT AIGU (U+00ED) :

í

Mais Apple, au lieu de cela, ajoute un deuxième caractère, COMBINANT L'ACCENT AIGU (U+0301) :

Vous pouvez le faire vous-même (c'est là que le visualiseur de caractères entre en jeu). Tapez simplement un i puis chercher combining acute dans le Visualiseur de caractères, double-cliquez sur le symbole, et voilà :

i

Ce qui est, en fait complètement différent que le premier symbole, ci-dessus. Il est LETTRE MINUSCULE LATINE I (U+0069) suivi de COMBINANT L'ACCENT AIGU (U+0301). Copiez et collez-les dans le Visualiseur de caractères, et vous verrez ce que je veux dire.

Oui, les deux représentent visuellement le même symbole. Mais si, d'une manière ou d'une autre (généralement en même temps que la conversion du jeu de caractères), un processus UTF-8 ajoute le caractère de combinaison, mais que le caractère original pré-combiné est conservé ? En d'autres termes, que se passe-t-il lorsque l'approche des "symboles combinés" est d'une manière ou d'une autre ajouté à l'ancienne version, plutôt que le remplacer ? Eh bien, l'accent de "combinaison de caractères" voudra toujours faire son travail.

Donc, quand on combine LETTRE MINUSCULE LATINE I AVEC ACCENT AIGU (U+00ED) avec COMBINANT L'ACCENT AIGU (U+0301) :

í

Et voilà, vous l'avez.

Il existe une réponse très célèbre de Stack Overflow qui montre jusqu'où cela peut aller.


Quelques lectures légères :

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X