9
votes

Déterminez le codage d'entrée en examinant les octets d'entrée

Je reçois la saisie de la console de l'utilisateur et je veux le coder à UTF-8. Ma compréhension est C ++ n'a pas de codage standard pour les flux d'entrée et qu'elle dépend plutôt du compilateur, de l'environnement d'exécution, de la localisation et de ce qui n'est pas.

Comment puis-je déterminer le codage d'entrée en examinant les octets de l'entrée?


0 commentaires

5 Réponses :


3
votes

En général, vous ne pouvez pas. Si je tire un flux d'octets générés au hasard à votre application, comment peut-il déterminer leur "codage"? Il vous suffit de spécifier que votre application accepte certains codages ou en supposant que les mains du système d'exploitation vous serez codées de manière appropriée.


1 commentaires

Pour y construire, vous pouvez utiliser l'environnement pour déterminer une défaillance raisonnable. Jetez un coup d'œil à $ Lang et la commande locale, si votre système d'exploitation les soutient.



2
votes

Vérification générale de savoir si l'entrée est UTF est une question d'heuristique - il n'y a pas d'algorithme définitif qui vous indiquera "oui / non". Plus l'heuristique est complexe, les moins fausses positifs / négatifs que vous obtiendrez, mais il n'y a pas de "assurance".

Pour un exemple de heuristique, vous pouvez consulter cette bibliothèque: http://utfcppl.sourceforge.net/ xxx

Vous pouvez l'utiliser ou vérifier sa Sources Comment ils l'ont fait.


2 commentaires

NOTE - Cela vous dit si cela pourrait être UTF8, vous ne pouvez pas savoir si c'est le cas. Un flux d'ASCII de 7 bits réguliers est UTF8 jusqu'à ce que vous ayez frappé le premier caractère accentué.


Vérification Si l'entrée est valide UTF-8 ou non n'est pas heureuse (c'est ce que votre fonction fait), mais la détermination de l'UTF-8 était la intention de l'utilisateur est.



0
votes

Utilisez les moyens du système d'exploitation intégré. Celles-ci varient d'un système d'exploitation à l'autre. Sous Windows, il est toujours préférable d'utiliser des API Widecharar et de ne pas penser à l'encodage du tout.

et si votre entrée provient d'un fichier, par opposition à une console réelle, tous les paris sont éteints.


0 commentaires

0
votes

Jared Oberhaus a répondu à ce puits sur un Question associée spécifique à Java.

Fondamentalement, il y a quelques étapes que vous pouvez prendre pour faire une devin raisonnable, mais en fin de compte, il suffit de deviner sans indication explicite. (D'où le marqueur de nomenaire célèbre (IN) dans les fichiers UTF-8)


0 commentaires