En l'absence d'une nomenclature, existe-t-il un moyen rapide et sale de vérifier si un tampon char * contient des caractères UTF8?Vérifiez si un tampon char * contient des caractères UTF8?
Répondre
Pas fiable. Voir series de Raymond Chen sur posts sur le sujet.
Le problème est que l'UTF-8 sans nomenclature est trop souvent impossible à distinguer d'un codage ANSI tout aussi valide. Je pense que la plupart des solutions (comme l'API Win32 IsTextUnicode
) utilisent diverses heuristiques pour donner une meilleure estimation du format du texte.
Vous pouvez tester l'hypothèse qu'il pourrait, mais je crois que vous ne pouvez que finir par savoir que ce n'est pas avec certitude. En d'autres termes, vous pouvez examiner le tampon pour voir si toutes les séquences d'octets sont légales UTF-8, que les points de code sont représentés avec le plus petit nombre d'octets, qu'aucun code de substitution 16 bits n'est présent et ainsi de suite. Un tampon qui passe tous ces critères peut sembler être du texte, mais vous pourriez être dupé. En plus de la discussion de Raymond Chen à Old New Thing citée par la réponse de Mark Pim, le tampon pourrait en fait contenir du code machine x86 qui se trouve limité au sous-ensemble qui semble être ASCII imprimable sur 7 bits. Étonnamment, vous pouvez réellement écrire des programmes significatifs dans ce sous-ensemble, dont un exemple est le virus de test antivirus EICAR.
Bien sûr, un tampon qui contient des séquences d'octets qui sont malformées UTF-8 n'est probablement pas du tout du texte UTF-8. Dans ce cas, vous avez un haut degré de confiance. Ensuite, l'astuce consiste à déterminer quel encodage il pourrait être réellement.
Si vous savez (ou pouvez supposer) quelque chose sur le contenu sémantique du tampon, vous pouvez également l'utiliser pour soutenir votre détermination. Par exemple, si le tampon est censé contenir du texte en anglais, il est hautement improbable qu'il contienne des points de code en coréen, et il devrait généralement être orthographié correctement, suivre la grammaire anglaise, et ainsi de suite. Cela peut être cher à tester, bien sûr ...
Pour rapide et sale, vous ne pouvez pas faire beaucoup mieux que la regex sur this page. Si vous voulez juste savoir s'il est sûr de décoder les octets comme UTF-8, c'est tout ce dont vous avez besoin.
Vérifiez simplement que la séquence d'octets est valide en UTF-8. Si c'est le cas, la probabilité qu'il s'agisse d'un texte significatif dans tout autre codage est essentiellement zéro.
- 1. Vérifiez si Char est dans la gamme
- 2. € char est montré comme? en sortie UTF8
- 3. Vérifiez si HTML contient du JavaScript en PHP
- 4. Vérifiez si une variable contient une valeur numérique en Javascript?
- 5. Implémenter l'istream pour un tampon de caractères?
- 6. Comment écrire des fichiers avec des caractères UTF8 (lisibles)?
- 7. Comparaison de caractères utf8 PostgreSQL
- 8. Obtention du premier octet dans un tampon char *
- 9. Si textBox1 contient un entier
- 10. compare le tampon avec const char * en C++
- 11. Vérifiez si un répertoire existe en PHP
- 12. Copier des chaînes dans un tampon
- 13. Vérifiez si l'e-mail existe
- 14. Convertir latin1 en utf8?
- 15. Vérifiez si un tableau est vide sans utiliser de boucle?
- 16. Comment déterminer si une chaîne contient des métacaractères regex? (C#)
- 17. Vérifie si une chaîne contient un astérisque (*)
- 18. affichage incohérent des accents utf8
- 19. Comment extraire n caractères du tableau char
- 20. en passant le tampon char aux fonctions et en obtenant la taille du tampon
- 21. Vérifiez si une socket est connectée avant d'envoyer des données
- 22. email.retr récupère étranges = 20 caractères quand le corps du message contient des caractères chinois dans ce
- 23. Vérifiez si l'événement existe sur l'élément
- 24. Vérifiez si l'enregistrement a été détruit juste dans des rails
- 25. Vérifiez si les métadonnées jquery existent?
- 26. CrystalReportViewer, vérifiez si un rapport est actuellement affiché?
- 27. test si un vecteur contient un élément donné
- 28. Comment savoir si un UITextField contient un caractère spécifique
- 29. Vérifiez si le paquet Python est installé
- 30. Vérifiez si Yahoo Messenger est installé
Avec une nomenclature, il est toujours impossible de la distinguer. Par conséquent, la nomenclature est inutile en plus d'être activement nuisible. –