2010-09-24 6 views
0

J'utilise libxml2. Toutes les fonctions fonctionnent avec xmlChar *. J'ai trouvé que xmlChar est un char non signé.libxml2 questions sur xmlChar *

J'ai donc quelques questions sur la façon de travailler avec elle.

1) Par exemple, si je travaille avec le fichier utf-16 ou utf-32 comment processus libxml2 et renvoie xmlChar en fonction? Vais-je perdre quelques caractères alors ??

2) Si je veux faire quelque chose avec cette chaîne, dois-je jeter char * ou wchar_t * et comment ??

Vais-je perdre des personnages?

Répondre

1

xmlChar est pour la manipulation UTF-8 codant seulement.

Donc, pour répondre à vos questions:

  1. Non, vous ne perdrez pas si vous utilisez des caractères UTF-16 ou UTF-32. Utilisez simplement iconv ou toute autre bibliothèque pour encoder vos données UTF-16 ou UTF-32 avant de les transmettre à l'API.

  2. Ne vous contentez pas « jeté » la chaîne. Convertissez-les si nécessaire dans un autre encodage.

+0

Merci, mais maintenant j'ai d'autres questions: Comment ça marche maintenant? Parce que même si je nourris un fichier utf-16. Libxml sort toujours un char non signé *. Pourquoi et comment ça marche? La seconde est Comment puis-je co-convertir UTF32 ou UTF16 en UTF-8. Je ne veux pas utiliser de bibliothèques tierces. Je dois le faire sous UNIX. Je sais que les fenêtres ont une fonction WideCharToMutliByte Unix a-t-il quelque chose comme ça? Et la dernière question est comment puis-je convertir xmlchar en un autre encodage et à quel autre? – Nikita

+0

Oui. La chose est que l'API fait des conversions internes. Tous les CALL sont basés sur 'xmlChar', même si les flux FILES ou NETWORK que vous utilisez pour analyser le XML sont codés dans un jeu de caractères différent. Sous UNIX, utilisez LIBICONV. C'est une bibliothèque assez commune et si je me souviens bien, elle est déjà incluse dans LIBXML2. Pour convertir xmlChar en un autre encodage, utilisez à nouveau LIBICONV. Redards ... –

+0

Et encore une question. Pourquoi avez-vous dit que je devrais d'abord encoder UTF-16 avant de l'alimenter en libxml. J'ai juste essayé de le faire sans convertir puis j'ai appliqué la fonction xmlCheckUTF8 à chaque élément qui a été libéré de lib xml et c'était correct. Je suppose que unsigned char * est juste un nombre d'octets ... – Nikita