Comment obtenir un numéro de point de code pour un caractère donné dans une chaîne utf-8?
Je veux obtenir le code UCS-2 points pour une chaîne UTF-8. Par exemple le mot "bonjour" doit devenir quelque chose comme "0068 0065 006C 006C 006F". Veuillez noter que les personnages peuvent être de n'importe quelle langue, y compris des scripts complexes comme les langues d'asie orientale.
Donc, le problème se résume à "convertir un caractère donné à son UCS-2 point de code"
Mais comment? S'il vous plaît, de l'aide sera très appréciée depuis que je suis dans une grande hâte.
Merci d'avance
La Transcription de la réponse de l'interlocuteur posté une réponse
Merci pour votre réponse, mais il doit être fait en PHP v 4 ou 5, mais pas 6.
La chaîne sera une entrée de l'utilisateur, à partir d'un champ de formulaire.
Je veux mettre en œuvre une version de PHP de utf8to16 ou utf8decode comme
function get_ucs2_codepoint($char)
{
//calculation of ucs2 codepoint value and assign it to $hex_codepoint
return $hex_codepoint;
}
Pouvez-vous m'aider avec PHP, ou bien peut-il être fait avec PHP avec la version mentionnés ci-dessus?
Merci encore.
source d'informationauteur anjan
Vous devez vous connecter pour publier un commentaire.
Scott Reynen écrit une fonction pour convertir en UTF-8 Unicode. Je l'ai trouvé en regardant les La documentation PHP.
Utiliser un utilitaire tel que iconvou ce que les bibliothèques viennent avec la langue que vous utilisez.
Si vous insistez sur le déploiement de votre solution, de lire sur le UTF-8 format. En gros, à chaque point de code est stocké sous 1 à 4 octets, en fonction de la valeur du point de code. Les plages sont comme suit:
Où chaque x est un de bits de données. Ainsi, vous pouvez savoir combien d'octets composer chaque point de code en regardant le premier octet: si elle commence par un 0, un 1-byte character. Si elle commence par 110, c'est un caractère codé sur 2 octets. Si il commence à 1110, c'est un 3-byte character. Si elle commence par 11110, c'est un 4-byte character. Si elle commence par 10, c'est un non-le premier octet d'un caractère multi-octets. Si elle commence par 11111, c'est un caractère non valide.
Une fois que vous comprendre comment le nombre d'octets dans le personnage, c'est juste une question si peu tourner. Notez aussi que l'UCS-2 ne peut pas représenter les caractères au-dessus de U+FFFF.
Puisque vous n'avez pas de spécifier une langue, voici un exemple de code C (vérification des erreurs omis):
Code PHP (qui suppose utf-8 valide, aucune vérification de non-utf-8 valide):
Je me suis amusé parce que je viens de donner à ce problème pour les étudiants à un examen final. Voici un croquis de l'UTF-8:
Et voici quelques C99 code: