Comment tester une application pour l'encodage correct (par exemple UTF-8)
Problèmes d'encodage sont parmi les un sujet qui m'ont piqué le plus souvent au cours du développement. Chaque plate-forme insiste sur son propre codage, le plus probable des non-UTF-8 par défaut sont dans le jeu. (J'ai l'habitude de travailler sur Linux, par défaut en UTF-8, mes collègues travaillent pour la plupart sur la version allemande de Windows, par défaut ISO-8859-1 ou d'une même page de code windows)
Je crois, que l'UTF-8, c'est un standard pour le développement d'un i18nable application. Cependant, dans mon expérience de codage, des bugs sont généralement découvertes à la fin (même si je suis situé en Allemagne et nous avons quelques caractères spéciaux que le long avec de l'ISO-8859-1 fournissent les différences observables).
Je crois que les développeurs avec une absence totale de jeu de caractères ASCII (ou ceux qui connaissent une langue qui utilise un tel jeu de caractères) ont une longueur d'avance dans la fourniture de données de test. Mais il doit y avoir un moyen de faciliter ce, pour le reste d'entre nous.
Ce que [technique|outil|incentive] sont des gens ici? Comment obtenez-vous votre co-développeurs à s'occuper de ces questions? Comment avez-vous vérifier la conformité? Sont les contrôles effectués manuellement ou automatiquement?
En ajoutant une réponse possible à l'avance:
J'ai découvert récemment fliptitle.com (ils fournissent un moyen facile d'obtenir des caractères bizarres écrit "uʍop ǝpısdn" *) et j'ai l'intention de les utiliser pour fournir facilement vérifiable UTF-8 chaînes de caractères (comme la plupart des caractères utilisés il y a à peu bizarre binaire de codage de position), mais il doit sûrement être plus systématique des tests, des motifs ou des techniques pour s'assurer de l'UTF-8 de compatibilité/d'utilisation.
Note: Même si il y a acceptée de répondre, j'aimerais savoir de plus en plus techniques et des modèles si il y a quelques. S'il vous plaît ajouter plus de réponses si vous avez d'autres idées. Et il n'a pas été facile de choisir une seule réponse pour acceptation. J'ai choisi la regexp réponse pour le moins attendu de l'angle pour aborder le problème, même si il y aurait des raisons pour choisir d'autres réponses. Dommage qu'une seule réponse peut être acceptée.
Vous remercie pour votre intervention.
*) c'est "à l'envers" écrit "à l'envers", pour ceux qui ne peuvent pas voir ces personnages en raison de problèmes de police
OriginalL'auteur Olaf Kock | 2009-01-25
Vous devez vous connecter pour publier un commentaire.
Il y a un expression régulière pour tester si une chaîne est UTF-8 valide:
Mais cela ne garantit pas que le texte réel est UTF-8.
Un exemple: La séquence d'octets pour la lettre " (U+00F6) et le correspondant de l'UTF-8 séquence est 0xC3B6.
Ainsi, lorsque vous obtenez 0xC3B6 en entrée vous pouvez dire que c'est UTF-8 valide. Mais on ne peut sûrement dire que la lettre ö a été soumis.
C'est parce que, imaginez que pas en UTF-8 a été utilisé, mais l'ISO 8859-1 à la place. Il y a la séquence 0xC3B6 représente le personnage à (0xC3) et ¶ (0xB6) respectivement.
De sorte que la séquence 0xC3B6 peut soit représenter ö l'utilisation de l'UTF-8 ou ö utilisation de la norme ISO 8859-1 (même si ce dernier est assez inhabituel).
Donc à la fin c'est seulement deviner.
OriginalL'auteur Gumbo
Merci pour fliptitle!
Moi aussi, je suis en train d'établir un bon plan de test pour s'assurer que l'application prend en charge Unicode dans l'ensemble du système.
Je suis bilingue, mais dans deux langues qui utilisent uniquement de l'ISO-8859-1. Donc, j'ai eu du mal à déterminer ce qu'est une "vraie-vie", "significatif" manière de tester la gamme complète d'Unicode possibilités.
Je viens de tomber sur ce:
Suivi Post:
Après l'élaboration de certains tests pour mon application, j'ai réalisé que j'avais concocté une petite liste de codées valeurs qui pourraient être utiles à d'autres.
Je suis en utilisant le suivant internationale des chaînes dans mon test:
(NOTE: voici certains de texte UTF-8... j'espère que vous pouvez voir dans votre navigateur)
ユーザー別サイト
简体中文
크로스 플랫폼으로
מדורים מבוקשים
أفضل البحوث
Σὲ γνωρίζω ἀπὸ
Десятую Международную
แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช
∮ E⋅da = Q, n → ∞, ∑ f(i) = ∏ g(i)
français langue étrangère
mañana olé
(Fin de l'UTF-8 étrangères/non-texte en anglais)
Cependant, à différents moments au cours des tests, j'ai réalisé que c'était insuffisant pour seulement avoir des informations sur la manière dont les cordes étaient censés regarder lorsqu'ils sont rendus dans leur des alphabets étrangers. J'ai aussi besoin de connaître la bonne Unicode codepoint de nombres, mais aussi les valeurs hexadécimales correctes de ces chaînes dans au moins deux codages (UCS-2 et UTF-8).
Ici est l'équivalent de point de code de numérotation et les valeurs en hexadécimal:
Aussi, voici quelques images qui montrent quelques communes "sig-rendus" qui peuvent se produire dans différents éditeurs, même si le sous-jacent octets sont bien formés en UTF8. Si vous voyez l'une de ces interprétations, cela signifie probablement que vous avez correctement réalisé une chaîne UTF8, mais que votre éditeur/viewer est d'essayer de les interpréter dans certaines encodage autre que UTF-8.
L'Échantillon Rendus Num. 1
L'Échantillon Rendus Num. 2
OriginalL'auteur pestophagous
Le véritable fauteur de trouble avec l'encodage des caractères est assez souvent qu'il y a plusieurs encodage des bogues et que certains comportement incorrect a été introduit en raison d'autres bugs. Je n'ai pas le nombre de fois que j'ai vu cela se produire.
L'objectif, comme toujours, est à manipuler correctement dans chaque endroit. Donc la plupart du temps de simples tests unitaires peuvent faire l'affaire, il n'a même pas à être très complexe de jeux de caractères. - Je trouver tous les bogues juste par des essais sur notre caractère national "ø", parce qu'il établit différemment en UTF-8 et la plupart des autres jeux de caractères.
L'agrégat fonctionne très bien quand toutes les pièces de le faire correctement. Je sais que cela peut sembler trivial, mais quand il s'agit de jeu de caractères de questions, elle a toujours travaillé pour moi 😉
Vous affirmez avec le \u séquence d'échappement par rapport à la non-caractère d'échappement
OriginalL'auteur krosenvold
La localisation est assez difficile.
Je pense que vous êtes vraiment se poser deux questions. L'un d'eux, comment voulez-vous obtenir tout le monde à travailler correctement sur un i8n application, n'est pas technique, mais un projet de gestion de la question, à mon avis. Si vous voulez que les gens à utiliser une norme commune, comme UTF-8, alors vous devrez tout simplement de la faire respecter. Outils d'aide, mais les gens doivent d'abord être dit de le faire.
D'ailleurs dire que l'UTF-8 est à mon avis le chemin à parcourir, il est difficile de donner une réponse aux questions sur les outils. Cela dépend vraiment du type de projet que vous êtes en train de faire. Si, par exemple, est un projet Java qui vous parlez, alors c'est une simple question de configurer correctement l'IDE pour coder les fichiers en UTF-8. Et assurez-vous que votre UTF-8 localisations sont dans les fichiers de ressources externes.
Une chose que vous pouvez certainement le faire est de faire des tests unitaires que vérifier la conformité. Si vos messages localisés/les étiquettes sont dans les fichiers de ressources, alors il est faily facile de vérifier si elles sont correctement codés en UTF-8 je pense.
plus - votre une faute de frappe décrit les situations que j'ai vécu: "faily facile à vérifier..." j'aime ça, il a vraiment quelque chose de vrai 😉
OriginalL'auteur Stefan Arentz
En PHP, nous utilisons les fonctions mb_ comme mb_detect_encoding() et mb_convert_encoding(). Ils ne sont pas parfaits, mais ils nous chercher à 99,9% du chemin. Que nous avons un peu d'expressions régulières pour extraire funky caractères quelque peu y faire de temps en temps.
Si vous allez internationale, vous voulez absolument utiliser de l'UTF-8. Nous n'avons pas encore trouver la solution parfaite pour obtenir l'ensemble de nos données en UTF-8, et je ne suis pas sûr qu'il existe. Vous avez juste à continuer à bricoler avec elle.
OriginalL'auteur jjriv