web-dev-qa-db-fra.com

Comment trouver ce caractère (par recherche unicode) dans le bloc-notes ++ ﻁ (\ uFEC1 et uniquement ce caractère)

Comment trouver ce caractère (par recherche unicode) dans le bloc-notes ++?

Si je vais à charmap

et je choisis ce personnage

Je tape FEC1 dans la boîte de recherche Unicode et appuie sur ENTREE. Le caractère est trouvé.

enter image description here

Je le cherche sur fileformat.info

http://www.fileformat.info/info/unicode/char/fec1/index.htm

UTF-8 (hex)   0xEF 0xBB 0x81 (efbb81)
UTF-16 (hex)  0xFEC1 (fec1)

Si je saisis le caractère littéralement dans le champ de recherche, il le trouve

enter image description here

Mais je ne vois pas quel unicode chercher pour le trouver

J'aimerais pouvoir le rechercher à la fois dans UTF-8 et UTF-16

[\ uFEC1] semble trouver le caractère, mais il trouve plus que ce caractère

Maintenant, si je lance quelques FEC9 dedans, alors je vois que [\ uFEC1] semble les trouver aussi

enter image description here

Alors, comment puis-je rechercher\uFEC1 et seulement cela. Et je suis intéressé par la recherche par son code UTF-8 aussi

5
barlop

Pour effectuer une recherche par points de code Unicode en utilisant UTF-16, vous utiliseriez (\x{FEC1}), et cela fonctionne que le fichier soit codé avec UTF-8 ou UTF-16.

N'oubliez pas que vous n'avez pas besoin de rechercher par le code UTF-8, car vous pouvez effectuer une recherche par le code UTF-16. Mais pour répondre à la partie de votre question qui vous demande comment vous recherchez ce caractère par le code UTF-8 ...

Vous ne pouvez pas. Eh bien, vous pouvez le faire, mais c'est un hideux pirater et vous ne devriez vraiment pas .

La chose évidente à essayer serait de rechercher \xef\xbb\x81 dans votre document codé UTF-8, mais cela ne fonctionne pas. (Notez qu'il n'y a pas {} ici: Notepad ++ attend soit \xNN pour 2 chiffres hexadécimaux, soit \x{NNNN} pour 4 chiffres hexadécimaux). En effet, Notepad ++ ne recherche pas les valeurs d'octets, mais les points de code Unicode. Vous pouvez donc rechercher le point de code U + FEC1, mais pas les octets UTF-8 0xEF 0xBB 0x81, car Notepad ++ "cache" les détails de l'encodage. (Parce que dans presque tous les scénarios, une personne qui édite un fichier texte se souciera beaucoup plus de trouver le caractère réel que de trouver les octets UTF-8.)

Vous pouvez également essayer une autre astuce, à savoir prendre ce fichier codé UTF-8 et choisir l’option de menu Encoding → Encode in ANSI. ﻁﻁﻉﻁﻉﻁﻉ semble alors devenir ï»ï»ï»‰ï»ï»‰ï»ï»‰. (Je dis que "semble devenir" plutôt que "devient" parce que ... eh bien, lisez la suite.) C'est parce qu'il a pris le texte UTF-8 de votre fichier et l'a réinterprété comme "ANSI" ( ce qui est un nom de codage terrible parce que c'est complètement faux , et devrait vraiment s'appeler "Windows-1252" , mais c'est une question différente). (En passant, la raison pour laquelle ﻁﻁﻉﻁﻉﻁﻉ a l'air en arrière dans mon texte plutôt que dans votre capture d'écran: c'est parce que Notepad ++ ne se soucie pas de savoir que l'arabe est écrit de droite à gauche, il montre donc les caractères de gauche à droite. dans l'ordre dans lequel ils ont été collés dans le fichier, mais votre navigateur se soucie de présenter l'arabe dans l'ordre approprié de droite à gauche, les deux premières lettres de cette chaîne (ﻁﻁ) apparaissent. sur le côté droit de la chaîne, pas sur le côté gauche comme ils semblent dans Notepad ++). Digressions de côté, voici pourquoi cela sera utile. Dans l'encodage "ANSI" (en réalité Windows-1252), chaque octet est un seul caractère. Vous pouvez désormais effectuer une recherche octet par octet. Maintenant, si vous recherchez \xef\xbb\x81 (qui n'a pas besoin d'être une expression régulière, juste une recherche "étendue"), il trouvera les caractères. Sorte de. Cela ressemblera à la mise en surbrillance des deux caractères ï», mais elle met réellement en surbrillance trois caractères : ï, » et un caractère "invisible" 0x81 qui n'existe pas vraiment. (Parce qu'il y a aucun caractère au niveau du 0x81 dans l'encodage Windows-1252: voyez par vous-même .) Et maintenant, vous voyez pourquoi j'ai dit "semble devenir" - parce que votre texte codé en UTF-8 a réellement devenu ï»_ï»_ﻉï»_ﻉï»_ﻉ, où _ représente un caractère "invisible" qui n'existe pas officiellement dans le Page de code Windows-1252. Quoi qu'il en soit, maintenant que vous avez trouvé la séquence de trois caractères avec les valeurs d'octet 0xEF, 0xBB et 0x81 dans Windows-1252 et que Notepad ++ les a mis en surbrillance, vous pouvez choisir l'option de menu Encoding → Encode in UTF-8 et votre texte se reconvertira en UTF-8, alors que Notepad ++ garde la surbrillance au même endroit - et vous constaterez donc qu’un caractère a été mis en surbrillance.

Alors pourquoi est-ce que je dis que vous ne devriez vraiment pas faire cela? Parce que la seule raison pour laquelle cela fonctionne est que Notepad ++ n'a pas bien agi lorsque vous avez changé de page de codes. Lorsque vous trouvez un caractère manquant, vous devez vous plaindre ou insérer un caractère tel que le caractère de remplacement Unicode (ou un simple ? si vous êtes dans une page de code héritée qui ne contient pas ). quelque chose pour que l'utilisateur sache qu'il y a un caractère invalide dans son texte. Les erreurs doivent ne jamais être ignorées en silence, et le fait d'avoir une valeur 0x81 dans le texte Windows-1252 est une erreur . La seule raison pour laquelle cette astuce fonctionne est que Notepad ++ fait la mauvaise chose avec des caractères non valides (c'est-à-dire qu'il les ignore). Donc, vous ne devriez vraiment pas vous reposer sur cette astuce: avec toute mise à jour de Notepad ++, il pourrait changer son comportement non documenté (et incorrect), et commencer à mettre correctement caractères de remplacement dans le texte mal codé, à quel point cette astuce échouerait. Tenez-vous en à la recherche de vrais points de code Unicode et vous serez bien mieux loti.

En passant, la raison pour laquelle votre tentative initiale ([\uFEC1]) a échoué est due au fait que, selon syntaxe d'expression régulière de Notepad ++ , \u signifie "une lettre majuscule". (Rappelez-vous que dans les expressions régulières, les crochets représentent "n’importe lequel de ces caractères"). La documentation précise en outre "Voir la note concernant les lettres minuscules", et la note concernant les lettres minuscules indique que "cela retombera sur" un caractère Word "si l'option de recherche" Correspondance "est désactivée." Comme dans votre capture d'écran. Par conséquent, l'expression régulière [\uFEC1] recherche "tout caractère Word, ou F, ou E, ou C ou 1", ce qui correspond à chaque caractère de votre exemple de texte.

Ouf, cela s'est avéré être une très longue réponse à ce que j'ai dit serait "très simple". J'espère que cela vous aidera à comprendre un peu mieux l'Unicode. si c'est le cas, l'heure que j'ai passée à taper cela aura valu la peine.

11
rmunn

Jetez un coup d'oeil: Quelqu'un sait comment utiliser Regex dans Notepad ++ pour trouver des caractères arabes?

Étant donné que la mise en oeuvre des expressions rationnelles dans Notepad ++ nécessite l’utilisation du

\x{NNNN}

notation pour correspondre aux caractères Unicode.

enter image description here

Dans votre exemple

\x{FEC1} 
4
duDE