Bibliothèque C pour convertir les points de code Unicode en UTF8?
Je dois passer par du texte et de l'écriture UTF8 sortie selon les modèles de caractères. Je pensais que ça va être facile si je peux travailler avec les points de code et d'obtenir qu'il soit converti en UTF8. J'ai lu sur unicode et UTF-8, mais ne pouvait pas trouver une bonne solution. Toute aide sera appréciée.
source d'informationauteur chanux | 2011-01-05
Vous devez vous connecter pour publier un commentaire.
La conversion des points de code Unicode UTF-8 est tellement banal que de faire l'appel à une bibliothèque prend sans doute plus de code que de simplement le faire vous-même:
Aussi, à faire vous-même signifie que vous pouvez régler l'api pour le type de travail que vous avez besoin (caractère-à-un-temps? Ou de longues chaînes?) Vous pouvez supprimer les cas d'erreur si vous savez que votre entrée est une valeur scalaire Unicode valide.
L'autre sens est un bon peu plus difficile à obtenir correct. Je recommande un automate fini approche plutôt que l'habituel bits-arithmétique des boucles qui parfois décoder invalide séquences comme des alias pour des personnages réels (ce qui est très dangereux et peut conduire à des problèmes de sécurité).
Edit: Même si vous ne finissent par aller à une bibliothèque, je pense que vous devriez essayer de l'écrire vous-même d'abord, ou au moins étudier sérieusement l'UTF-8 spécifications avant d'aller plus loin. Beaucoup de mauvaise conception peut venir de traitement de l'UTF-8 comme une boîte noire lorsque le point est qu'il n'est pas une boîte noire, mais a été créé pour avoir très puissantes propriétés, et aussi beaucoup de programmeurs de nouvelles de l'UTF-8 ne pas voir ce, jusqu'à ce qu'ils ont travaillé avec beaucoup d'eux-mêmes.
iconv pourraient être utilisés j'figure.
Mais j'ai peur que wchar_t pourrait ne pas représenter des points de code Unicode, mais des valeurs arbitraires.. EDIT: je suppose que vous pouvez le faire en utilisant simplement une Unicode source:
libiconv.
De la plate-forme? Sur Windows, vous pouvez utiliser WideCharToMultiByte(CP_UTF8,...)
Sans doute, la source codepoint doivent être encodés en UTF-16, ce qui signifie que vous devez être capable de faire un tel codage. Dans certains cas (les paires de substitution), il n'est pas trivial.
Ma compréhension est que vous avez un peu de texte dans un code donné et que vous voulez convertir au format Unicode (UTF-16). Droit? Un MultiByteToWideChar(page de codes, sourceText,...) /WideCharToMultiByte(CP_UTF8, utf16Text,...) aller-retour fera l'affaire.