OVH Cloud OVH Cloud

Convertir UTF8 vers Latin

17 réponses
Avatar
Julien
bonjour

je cherche à convertir un texte du type "fran%C3%A7ais" vers
"français", pour cela j'ai trouver un bout de code qui semble faire ce
que j'ai besoin mais je n'arrive pas à le faire fonctionner (je
debute)

int
UTF8Toisolat1(unsigned char* out, int outlen, unsigned char* in, int
*inlen)
{
unsigned char* outstart= out;
unsigned char* outend= out+outlen;
unsigned char* inend= in+*inlen;
unsigned char c;

while (in < inend) {
c= *in++;
if (c < 0x80) {
if (out >= outend) return -1;
*out++= c;
}
else if (in == inend) {
*inlen -= 1;
break;
}
else if (((c & 0xFC) == 0xC0) && ((*in & 0xC0) == 0x80)) {
/* a two byte utf-8 and can be encoding as isolate1 */
*out++= ((c & 0x03) << 6) | (*in++ & 0x3F);
}
else return -2;
/* TODO : some should be represent as "&#x____;" */
}
return out-outstart;
}

est-ce que quelqu'un pourrait m'aider ?

7 réponses

1 2
Avatar
Jean-Marc Bourguet
Harpo writes:

Antoine Leca wrote:

Mais c'est pour t'expliquer
que la difficulté de ton problème n'est pas vraiment bordée, donc
parfois il faut savoir être humble, et accepter de penser que d'autres
ayant déjà trimmé, on peut peut-être leur faire la faveur de
réutiliser leur travail.


Un préalable à tout développement est une utilisation intensive de
Google.


Juste un petit bémol, attention à la légalité de ce qu'on
fait quand on récupère du code...

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Jean-Marc
"Jean-Marc Bourguet" a écrit dans le message de
news:
Harpo writes:

Antoine Leca wrote:

Mais c'est pour t'expliquer
que la difficulté de ton problème n'est pas vraiment bordée, donc
parfois il faut savoir être humble, et accepter de penser que d'autres
ayant déjà trimmé, on peut peut-être leur faire la faveur de
réutiliser leur travail.


Un préalable à tout développement est une utilisation intensive de
Google.


Juste un petit bémol, attention à la légalité de ce qu'on
fait quand on récupère du code...


Hello,

attention aussi quand on développe pour cretaines personnes.
Les banques par exemple nous font jurer sur l'honneur que tout
notre code est propriétaire et nous imposent de ne pas
utiliser de bibliothèques openSource. Par exemple, impossible
d'utiliser LibXML. Nous avons du redévelooper GetTag, SetTag etc.

Attention aussi aux bibliothèques OpenSource. Exemple: j'ai eu des
crash inexplicables de LibXML (justement) sous Solaris alors que le
même programme avec les mêmes données de test en entrée fonctionnait
sans problèmes sous Windows et AIX.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."



Avatar
Harpo
Jean-Marc Bourguet wrote:


Un préalable à tout développement est une utilisation intensive de
Google.


Juste un petit bémol, attention à la légalité de ce qu'on
fait quand on récupère du code...


Merci de le souligner.
C'est un problème très important, je n'y pense pas assez du fait que je
n'utilise que des logiciels libres et ne fais (quand je veux) que des
logiciels libres, je n'ai donc pas ce problème.
Je ne me sens pas le droit de faire un logiciel non libre à partir d'un
logiciel libre ou l'inverse, c'est du piratage. Mais si je trouve des
concepts qui peuvent être bons, j'essaye de les intégrer à mes
connaissances et éventuellement il en sort quelque chose (si je veux).

Sinon il faudrait verser des royalties à un cro-magnon à chaque fois
qu'on fait du feu, je n'irais jamais lui voler une allumette, il me la
donne ou il ne me la donne pas c'est son problème, il s'agit de quelque
chose de concret, mais ça me foutrait mal qu'il porte plainte parce que
je frotte des silex !
Une chose concrete comme une allumette n'existe qu'en tant qu'instance.
Le concept sous-jacent appartient à tous ceux qui sont capable de le
concevoir.

A partir du moment où quelqu'un me montre son feu, il m'en *donne* le
concept, s'il ne veut pas le me donner, qu'il reste s'enfumer au fond
de sa caverne. Ce n'est en tout cas pas demain que je vais acheter une
abstraction !
Autant essayer de vendre un frigo à un Inuit qui n'a pas l'électricité.

--
Patrick.
http://patrick.davalan.free.fr/


Avatar
Jean-Marc Bourguet
"Jean-Marc" writes:

attention aussi quand on développe pour cretaines personnes.
Les banques par exemple nous font jurer sur l'honneur que tout
notre code est propriétaire et nous imposent de ne pas
utiliser de bibliothèques openSource. Par exemple, impossible
d'utiliser LibXML. Nous avons du redévelooper GetTag, SetTag etc.


Les contraintes contractuelles sont encore une autre chose. Si elles
sont stupides tant pis pour celui qui les impose.

Attention aussi aux bibliothèques OpenSource. Exemple: j'ai eu des
crash inexplicables de LibXML (justement) sous Solaris alors que le
même programme avec les mêmes données de test en entrée fonctionnait
sans problèmes sous Windows et AIX.


Ce genre de problemes se trouve partout, dans le proprietaire comme
dans le libre. Vu que libXML doit faire du traitement de characteres,
une idee comme ca: char est signe sous Solaris et non signe sous AIX.
Est-ce que par hasard il serait aussi non signe sous Windows et que
libXML se sert de char pour indexer des tableaux?

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Antoine Leca
En <news:427fa907$0$3106$, Harpo va escriure:
Sinon, le fait d'utiliser une grosse bibliothèque est typiquement un
mauvais argument,


Définit « gros », s'il te plaît.

iconv()/libiconv est souvent une seule fonction; le fait que le binaire soit
gros provient des nombreuses tables embarquées (et avec les objects
dynamiques, certains s'ingénient à en rajouter toujours plus, au motif que
cela peut toujours servir à quelqu'un).

À l'opposé, la bibliothèque standard est une grosse bibliothèque
probablement à tous les points de vue. Mais il est difficile de résister à
son utilisation.

surtout si on n'y est pas linké statiquement.


Que veux-tu dire ?


C'est aussi très instructif de voir la manière dont d'autres ont
résolu des problèmes.


Oui, si tu as le temps de l'étudier.


Antoine

Avatar
Harpo
Antoine Leca wrote:

En <news:427fa907$0$3106$, Harpo va escriure:
Sinon, le fait d'utiliser une grosse bibliothèque est typiquement un
mauvais argument,


Définit « gros », s'il te plaît.


La grosseur est une notion relative, je suis un peu moins gros que
Carlos mais plus que je ne l'ai été. Et en hiver c'est pire.

iconv()/libiconv est souvent une seule fonction; le fait que le
binaire soit gros provient des nombreuses tables embarquées (et avec
les objects dynamiques, certains s'ingénient à en rajouter toujours
plus, au motif que cela peut toujours servir à quelqu'un).


Merci pour cette information, elle pourra se révéler précieuse.

À l'opposé, la bibliothèque standard est une grosse bibliothèque
probablement à tous les points de vue. Mais il est difficile de
résister à son utilisation.

surtout si on n'y est pas linké statiquement.


Que veux-tu dire ?


Rien d'extraordinaire. Un programme linké statiquement occupe sur un
support la place des fichiers objets avec lequel il est linké, il peut
être dommage d'occuper 1 MB juste pour scanner un URI, ce qui peut se
faire en 100 fois moins de place, enfin au pif.

C'est aussi très instructif de voir la manière dont d'autres ont
résolu des problèmes.


Oui, si tu as le temps de l'étudier.


C'est une question de stratégie.
Il faut différencier le script qui doit tourner pour midi (et qui aura
le sort de ce qui se trouve sur /tmp) et une application qui demande
des semaines, des mois voire des années. Pour ma part, je pense qu'un
programme est quasiment terminé lorsqu'il ne reste plus qu'à l'écrire.

--
Patrick.
http://patrick.davalan.free.fr/


Avatar
Charlie Gordon
"Julien" wrote in message
news:
bonjour

je cherche à convertir un texte du type "fran%C3%A7ais" vers
"français", pour cela j'ai trouver un bout de code qui semble faire ce
que j'ai besoin mais je n'arrive pas à le faire fonctionner (je
debute)


Je ne vois pas de probleme dans le code ci-dessous, bien que la sémantique ne
soit pas très claire : Je suppose que inlen est le nombre de bytes à convertir
en entrée, et reçoit en sortie le nombre qui ont été effectivement convertis,
sauf en cas d'erreur.

En revanche la question me semble mal posée : "fran%C3%A7ais" ne contient pas de
caractères non ASCII, elle a été encodée comme une URL ou les caractères non
compris dans le jeu de base sont remplacés par leur conversion par %02d .

Serait-ce là ton problème ?

Chqrlie.

int
UTF8Toisolat1(unsigned char* out, int outlen, unsigned char* in, int
*inlen)


unsigned char* outstart= out;
unsigned char* outend= out+outlen;
unsigned char* inend= in+*inlen;
unsigned char c;

while (in < inend)

c= *in++;
if (c < 0x80)

if (out >= outend) return -1;
*out++= c;
}
else if (in == inend)

*inlen -= 1;
break;
}
else if (((c & 0xFC) == 0xC0) && ((*in & 0xC0) == 0x80))

/* a two byte utf-8 and can be encoding as isolate1 */
*out++= ((c & 0x03) << 6) | (*in++ & 0x3F);
}
else return -2;
/* TODO : some should be represent as "&#x____;" */
}
return out-outstart;
}

est-ce que quelqu'un pourrait m'aider ?


1 2