Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
20 avril 2012 5 20 /04 /avril /2012 07:43

UTF, Universal Transformation Format 

 

 


Unicode et ISO/CEI 10646 acceptent plusieurs formes de transformation universelle pour représenter un point de code valide. Citons :

Le nombre après UTF représente le nombre minimal de bits des codets avec lesquels un point de code valide est représenté.

Ces transformations ont été initialement créées pour la représentation interne et les schémas de codage des points de code de la norme ISO 10646, qui au départ pouvait définir des points de code sur 31 bits. Depuis, la norme ISO/CEI10646 a été amendée, afin que les trois formes soient totalement compatibles entre elles et permettent de coder tous les points de code (car UTF-16 ne permet de représenter que les points de code des 17 premiers plans).

Unicode a normalisé également de façon très stricte ces trois formes de transformation de tous les points de code valides (U+0000 à U+D7FF et U+E000 à U+10FFFF) et uniquement eux, que ce soit pour représenter du texte sous forme de suites de points de codes, ou des points de code assignés aux caractères valides, ou réservés, ou assignés à des non-caractères. Les points de code assignés aux demi-zones (U+D800 à U+DFFF), utilisés uniquement en UTF-16, sont invalides isolément puisqu’il servent à la représentation, par un couple de 2 codets de 16 bits, des points de code des 16 plans supplémentaires.

 

UTF-8 


Article détaillé : UTF-8.

 

 

 

 

L’UTF-8, spécifié dans le RFC 3629, est le plus commun pour les applications Unix et Internet. Son codage de taille variable lui permet d’être en moyenne moins coûteux en occupation mémoire (pour les langues à alphabet latin). Mais cela ralentit nettement les opérations où interviennent des extractions de sous-chaînes, car il faut compter les caractères depuis le début de la chaîne pour savoir où se trouve le premier caractère à extraire.

L’UTF-8 assure aussi, et c’est son principal avantage, une compatibilité avec les manipulations simples de chaînes en ASCII dans les langages de programmation. Ainsi, les programmes écrits en C peuvent souvent fonctionner sans modification.

Initialement, l’UTF-8 pouvait coder n’importe quel point de code entre U+0000 et U+7FFFFFFF (donc jusqu’à 31 bits). Cet usage est obsolète et la norme ISO/CEI 10646 a été amendée pour ne plus supporter que les points de code valides des 17 premiers plans, sauf ceux de la demi-zone correspondant aux codets utilisés en UTF-16 pour la représentation sur deux codets des points de code des 16 plans supplémentaires. Aussi les séquences les plus longues en UTF-8 nécessitent au maximum 4 octets, au lieu de 6 précédemment. De plus, UTF-8 a été amendé d’abord par Unicode puis par l’ISO/CEI10646 pour ne plus accepter que la représentation la plus courte de chaque point de code (unicité du codage).

Son avantage sur l’UTF-16 (et l'UTF-32) est que les différences d'ordonnancement des octets composant un mot (endianness) ne posent pas de problème dans un réseau de systèmes hétérogènes ; ainsi, cette transformation est utilisée aujourd'hui par la plupart des protocoles d’échange normalisés.

D’autre part, l’UTF-8 est totalement compatible pour la transmission de textes par des protocoles basés sur le jeu de caractères ASCII, ou peut être rendu compatible (au prix d’une transformation sur plusieurs octets des caractères non-ASCII) avec les protocoles d’échange supportant les jeux de caractères codés sur 8 bits (qu’ils soient basés sur ISO-8859 ou de nombreux autres jeux de caractères codés sur 8 bits définis par des normes nationales ou des systèmes propriétaires particuliers).

Son principal défaut est le codage de longueur très variable (1 octet pour les points de code assignés aux caractères ASCII/ISO646, 2 à 4 octets pour les autres points de code), même si l'auto-synchronisation propre à l'encodage UTF-8 permet de déterminer le début d'une séquence à partir d’une position aléatoire (en effectuant au plus 3 lectures supplémentaires des codets qui précèdent). Cependant, cet encodage n'est pas conçu pour faciliter le traitement des chaînes de caractères, à cet usage on lui préfère souvent l’UTF-16, parfois l’UTF-32 (gourmand en mémoire).

 

Dérivés 

  • Certains programmes (par exemple, la base de données Oracle) représentant en interne leurs données Unicode au format UTF-16 ont (ou ont connu) un défaut de conversion vers UTF-8 : un caractère compris entre U+10000 et U+10FFFF, stocké sur deux mots de 16 bits, se retrouve converti en UTF-8 comme étant une suite de deux caractères Unicode. Cela a amené la création « accidentelle » du CESU-8 et a pour avantage de faciliter l'usage d'Unicode sur des plates-formes 16 bits.
  • Le caractère Unicode nul U+0000 est codé en UTF-8 sous forme d’un unique octet nul 0x00. Selon le standard Unicode, ce caractère n'a aucune signification particulière3 ; toutefois (pour des raisons conceptuelles historiques), les bibliothèques de traitement de chaînes du langage C considèrent ce caractère de contrôle comme une fin de chaîne, ce qui complique l'implémentation de certains cas d'application. Sous la plate-forme Java, la version « (en)Modified UTF-8 » est née en reprenant l'avantage de la portabilité « 16 bits » du CESU-8 et en y ajoutant la possibilité d'encoder U+0000 sous la séquence 0xC0 0x80 (normalement interdite en UTF-84) : en échangeant de la sorte avec les bibliothèques C natives de la plateforme supportée, la plate-forme peut gérer facilement tous les textes Unicode valides ainsi que les fichiers de classes compilées (format alternatif portable, indépendant de l'endianness et de la taille des mots).

 

UTF-16 


Article détaillé : UTF-16.

 

 

 

L’UTF-16 est un bon compromis lorsque la place mémoire n’est pas trop restreinte, car la grande majorité des caractères Unicode assignés pour les écritures des langues modernes (dont les caractères les plus fréquemment utilisés) le sont dans le plan multilingue de base et peuvent donc être représentés sur 16 bits. La version française de l’ISO/CEI 10646 nomme ces mots de 16 bits des "seizets", mais la version internationale les décrit cependant bien comme de classiques mots de 16 bits composés de deux octets, et soumis aux règles usuelles de boutisme.

Codage UTF-16
hi \ lo DC00 DC01    …    DFFF
D800 10000 10001 103FF
D801 10400 10401 107FF
  ⋮
DBFF 10FC00 10FC01 10FFFF

Les points de code des 16 plans supplémentaires nécessitent une transformation sur deux mots de 16 bits:

  • on soustrait 0x10000 au point de code, ce qui laisse un nombre de 20 bits dans l'étendue 0..0xFFFFF
  • les 10 bits de poids fort (un nombre entre 0 et 0x3FF) sont additionnés à 0xD800, et donnent la première unité de code dans la demi-zone haute (0xD800..0xDBFF)
  • les 10 bits de poids faible (un nombre entre 0 et 0x3FF) sont additionnés à 0xDC00, et donnent la seconde unité de code dans la demi-zone basse (0xDC00..0xDFFF)

Comme la plupart des caractères couramment usités résident dans le plan de base, l'encodage des plans supplémentaires est souvent peu testé dans les logiciels, conduisant à des bugs ou des problèmes de sécurité même dans des logiciels largement diffusés5. Certains cadres légaux, tels le GB 18030, peuvent demander le support des plans supplémentaires, ceux-ci contenant notamment des caractères présents dans les noms propres.

Il est possible de déterminer le début de la séquence de codage à partir d’un point quelconque d’un texte représenté en UTF-16 en effectuant au maximum une lecture supplémentaire, uniquement si ce codet est dans la demi-zone basse. Cette forme est plus économique et plus facile à traiter rapidement que l’UTF-8 pour la représentation de textes contenant peu de caractères ASCII (U+0000 à U+007F).

Toutefois, cette transformation possède deux schémas de codage incompatibles qui dépendent de l’ordonnancement des octets dans la représentation d’entiers sur 16 bits. Pour résoudre cette ambiguïté et permettre la transmission entre systèmes hétérogènes, il est nécessaire d’adjoindre une information indiquant le schéma de codage utilisé (UTF-16BE ou UTF-16LE), ou bien de préfixer le texte codé avec la représentation du point de code valide U+FEFF (assigné au caractère « espace insécable de largeur nulle », un caractère aujourd’hui réservé à ce seul usage en tant que marqueur d’ordonnancement des octets), puisque le point de code “renversé” U+FFFE valide est un non-caractère, interdit dans les textes conformes à Unicode et ISO/CEI10646.

L’autre défaut d’UTF-16 est qu’un texte transformé avec lui et transmis avec l’un ou l’autre des deux schémas de codage contient un grand nombre d’octets nuls ou ayant une valeur en conflit avec les valeurs d’octets réservées par certains protocoles d’échange.

C’est notamment le codage qu’utilise la plate-forme Java en interne, ainsi que Windows pour ses APIs compatibles Unicode (avec le type "WCHAR").

 

UTF-32 


Article détaillé : UTF-32.

 

 

 

L’UTF-32 est utilisé lorsque la place mémoire n’est pas un problème et que l’on a besoin d’avoir accès à des caractères de manière directe et sans changement de taille (hiéroglyphes).

L’avantage de cette transformation normalisée est que tous les codets ont la même taille. Il n’est donc pas nécessaire de lire des codets supplémentaires pour déterminer le début de la représentation d’un point de code.

Toutefois, ce format est particulièrement peu économique (y compris en mémoire) puisqu’il « gaspille » inutilement au moins un octet (toujours nul) par caractère. La taille en mémoire d’un texte joue négativement sur les performances puisque cela nécessite plus de lectures et écritures sur disque en cas de saturation de la mémoire vive, et que cela diminue aussi les performances du cache mémoire des processeurs.

Pour les textes écrits dans les langues modernes actuelles (hormis certains caractères rares du plan idéographique supplémentaire), et n’utilisant donc que les points de code du plan multilingue de base, cette transformation double la quantité mémoire nécessaire par rapport à l’UTF-16.

Comme l’UTF-16, l’UTF-32 possède plusieurs schémas de codage dépendant de l’ordonnancement des octets composant un entier de plus de 8 bits (deux schémas de codage de l’UTF-32 sont normalisés, UTF-32BE et UTF-32LE). Il est donc aussi nécessaire de préciser ce schéma de codage, ou de le déterminer en préfixant le texte par la représentation en UTF-32 du point de code U+FEFF. Comme l’UTF-16, la présence d’octets nuls dans les schémas de codage normalisés de l’UTF-32 le rend incompatible avec de nombreux protocoles d’échange entre systèmes hétérogènes.

Aussi ce format n’est utilisé le plus souvent que très localement pour certains traitements en tant que forme intermédiaire plus facile à manipuler, et on lui préfère souvent la transformation UTF-16 souvent plus performante pour traiter et stocker des quantités importantes de textes, la conversion entre les deux étant très simple à réaliser, et très peu coûteuse en termes de complexité de traitement.

En fait, de très nombreuses bibliothèques de traitement de textes sont écrites uniquement avec l’UTF-16 et sont plus performantes qu’en UTF-32, même lorsque les textes contiennent des caractères des plans supplémentaires (car ce cas de figure reste rare dans la très grande majorité des cas).

On notera toutefois que la transformation en UTF-32 utilise des codets sur 32 bits, dont de très nombreuses valeurs peuvent ne représenter aucun point de code valide (valeurs hors des deux intervalles représentant les points de code valides U+0000 à U+D7FF et U+E000 à U+10FFFF), donc aucun caractère valide ou réservé (toute information qui y serait contenue ne peut donc pas être du texte au sens d’Unicode). La transmission de textes utilisant ces valeurs invalides de codets dans un des schémas de codage normalisés de l’UTF-32 est interdite pour tout système conforme à Unicode (il faut utiliser plutôt les points de code à usage privé), puisqu’il sera impossible de les représenter dans une autre transformation UTF avec lesquelles les trois UTF normalisées sont bijectivement compatibles.

Partager cet article

Repost 0

commentaires

☼ Zorbax ☼

  • : CHOMOLANGMA
  • CHOMOLANGMA
  • : Réflexions sur le sens de la vie. Diversités culturelles et médiatiques.
  • Contact

ON EST QUAND???

Bonjour, nous sommes le

☼ Qui Cherche Trouve ☼

♫♪♪♫♪♫♪♫♪

Poussieres De Savoir ☼

POUSSEZ PAS !!!

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcSH1bqV_MZbKff7r4KH0YXDgokYKnPMVcS17_NVF7KeFFQmHvTYYQ

 

 

Depuis le 2 octobre 2008 ma paroisse a compté de fidèles :

 


Compteur Global


 

 

 

 

 

☼ Merci à vous tous ☼

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcRspNEZw03K2txVYJaQojtGiQPv2Ef2hRp76vnThpM_Xhg74AeH

 

 

   Et aussi, bien sûr, à notre superbe équipe  !!!!!!!...

 


☼ En Alcove ☼

☼♥☼♥☼


 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcTJQdwhuv8K2KE2fv7sAcLYqokJ6fOwOos7DPEsrBY_tOyjkmt9

 

 

 

 

  http://t2.gstatic.com/images?q=tbn:ANd9GcTwbpFmC0lwUUqRVtxAgfCeDB97ON6I9jGDIVmmGwpa1bg_oeiS8w



 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcQJFhyxpCtvTfrKTTq2Dnraqndo0k6KOOvR5B49c424W-RXGsXk

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcQ4lkR76RVvxlM2Pg0xGQLGN-vJ1IC1AeiO9YFoy0C2maJDnAlsEA

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcS3s1MTNys4JJ2XciWuydUFkX2s3uxVNEo4XLmDXWkNuzNwaF-I

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcRpmq_X4KGoOioCJ7IGFovNaZR1dl5V9wdd73SKUZoyRXImy8hQsA

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcT6vugj46xpPFClJ40ZcN_g83W39aPcCsnryaBlwulPqhMuSmHABA

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcS0rnZSUpbcqus_ag8-saWRw8BVp-nHBjwhG0FGGsPrBMTVGsKfUA

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcRiQjNvzjX7IEkfQYGG-KxW9pOVJoLjsP43P-wRgoCo6bmRIFfQ

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcSTia4A3P4_qwGWtAAvhY4S2BKgtk6tR_QCD3_DTBLqQwkYTLP7

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcRPAWH7AgJ7gN7ej2rrAa90b9jK2nWJtRcdmCSJLXifbDqpzt-GAQ

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcSnH3SFCsuDblli6D1AJMGBIO3SduYE7QocfhaOPh2CbcgSaTJm3g

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcS_x5rZOKIoXBMbTrRfiBoXYGA8_aG1puNXFnPK-vFSJb8S0TB-

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcT5xPsHZoCoc3Y10UzSIfZBJ1VM5yTf0rOp0z02qzAq29ZylEqp

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcSJYo3dfiA7rWKtAhGDKlIvNQBBfXfxpskBzCjE2VA_WnhL03zQ

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcRrs5cw6eknmiTVBcESn97krqvfndk10XJq35s-mUIxnoXepsHU2w

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcTtPoMny2WLrgyLYUkv0xzCHZ3BSe7txlE-Xe2XSz1rA4IRBQ-8

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcTzDbIU4QatTLNRgPQwPUcMDO8BtCGQMAkP46aQAp05yXC1m0y84g

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcS_sSIdV_qG7YiVCrY6Fze69BhzpdENouF0zUUp4OV8__EbU9Ad

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcQ9uJqfoOS-LjhgtT3qLp4AH34AojcYXzS6ifUoduwpXl2xR4cu

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcSBBpAVI8uqqXKRXeWLnFO9do5ObFZm7YxgxrJ7-EbHR2oDqLo0vQ

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcRDpZXNSZZorQeUMLz3DTA9hEU2rI_bxr_LT9c4T9nvHvAWTZjCGQ

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcQJxvHFLqQeIleqlsCzYw3aqr-0Y6eKQMVnyaA5me5hdAxIljVU

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcSC9dHlJXHSlla_xZ5T9EZytHwAWT-qbU_d19dTtxAXrGNihAXKlQ

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcR9uI2iDGC9O3GMDlf8NsxtxQx-Qp8sqHmOc5rb-zkptdYl27ct

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcRbZ3vVwEjZT_vYCN_egFTIwdBz6fqNL0Pg-y_Q61vxrmzGOpx_

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcQJ2rE3MpU2-7BbpUlr6UqYo4BmnNs_dvTC88BMslWtXGy7xpm4

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcQEpgxQwBFunGDiUIemTa46VNveEHAu-uA8FY-TsPaLWXJFd2s0

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcQTdXbqeHRkSO7KlYa4OkUya7gTOtG1LddYFWDuhmMG8TTBud38

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcTNv54UJcOf0QWIB4OraEz3h5BSPwvVpIDgtJO-zq0-MNAH1T-r

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcQQ4msZqs5YGyEvDc4xIBtl0glm2rQZ7LsilbzRNUFi1QmhSgwd

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcRadP8tzRToSi6YgV25tgPSiZuZH-m01ykcCd-vsvFtJOoai2ucTw

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcQWsJatoxZ24v32bG85ut1XPEPG4Fa5l6ApTX9VfC1X3_fQlO6t

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcSATYwKzSKWCjMx6cjBGrTkiC8C_lyJBimQ86hhDpKGyeWCgRFU5Q

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcRkni6wj2PqLxVIQnGL2w-Hh0Qdu5Q2vEiKSUXAJ7TKh9ePWQBm

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcQzo44WmwLEIvLwTyzq_jnCtqqHX6X_CIYel1kbk7vcUHUp-ieN

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcQJijg5RyUyd3NObMK9uNkIduA32k3nPJwfiuvaWrAi2Td5vyXO

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcSLXSS07G9gseceN7SeCwGRL0C6ij_75lYGEnDN1qwb_bEl9bGs

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcSgjOBb-AqrP0ZXPZSVl55yswE6dnD4uny-n0Xh-9mAuwm1GUq3

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcSZAb3DktAXiGznQlZB9az_nvD6AoLygDkDTstPDm_WBfLnJ3ltQg

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcRXwcTaTVudGTxMwVFFrGw1Z-j9x9D9inLKamTPCwUThDbPuEYpeA

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcTU6wtRoYw9X2-MMykBLzlVjXeRgi5rqzD5ck22QxWwI8h7QeNUQA

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcRpMUOK13Ots0UnbeCQLds3ixSZxNY9gFOfm65Bvc-pf6ZKAlWbzg

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcQhH-RzSe9GF29vGoZwod2tN7O-9mFfpWJX4bLt78JtJYMqI8w1rA

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcQxu-I9t3HJlWQ3e6bM41HAOc8j3Smoe-ahJN9OTRyzd6vOUOVF

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcQYkezUKlW0ttRviIW9f6NJHBcjJ-sUE4XMIic0ka6qkCguqsqWEQ

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcSLwoIa5Xuj4eEFEX5vzJFqlL0GIrwjAUDCWbZgf6ni2O6MUMuwHg

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcSmu_lhCfJa5L3JKT73eNWm5-DVlMMhgQ2zjDd5kmbF9S0PDwt0

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcTl9CWad5AcZHOfC-RgTWPbODkKY_C0DW3MZXkDUucqfvfZLDvJvQ

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcSSorC-n_GApivF90u5JfsOvUI44_E6pQ_gYw3Zv_SawrJlQ7U_OA

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcSHehPIU8WfymVyIehhOVdWyZ9Iby-7WygiZdxRqYoB6-t4uxfc

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcTHknIkIppczoDGtgqaDVGpF5vzTnPgO0XzesL14bXWKIidntgi

 

 

 

http://t0.gstatic.com/images?q=tbn:ANd9GcQ2gFiEiRrnRVPCVmgC8fP4RV_b4Cyut6pHRWot2zotTH_isSgx

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcRMnyl4ZznB4yj9tFflGmUrm8zxq1VAfdzbHlagdVlYHHs5AqI2Xw

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcSABiNYE2Ig0ORn0Dp6LWBs8FU1-eDuUfhJpaBhY3dBILcGkw7Y

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcQX6x3fLQO-eGD7Sdc__AFLjGRztfSRzdOgtJe_w_XI_qKOl_cQ

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcQWAfv06yKnlGGke983sE24US_BbpZ0xgnAp3yIh3eXvCRrRfxtgg

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcSguscboVOMXCDflSARG5UefcNGLsGZylvXKHJGK4ldNdG1xYiR

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcTVsXwe7MG_AOX5rUiFD0hVw9aHeILEWPB_3WS5456jt040weKpxQ

 

 

 

http://t2.gstatic.com/images?q=tbn:ANd9GcS14rgGXof16mpTbvNq37y9tGIxf38V3B4j5iFLZChBi8qMo0cC

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcRk338QqS34hcxTHah2whOwSbnEtO-yxxKutL5KPMcrWPKtCTUf

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcTQg04AvSsLnhDeWWl4-qLzPD5EX7xzuOAVEiswXHB9n5gRBOxj

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcQC715gVGqLwXFM7U94WtdKlMrAiHbkqIvJl2WJ6h_JMsUMfL622g

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcR4ku7jfXybpiE3fm21gXSpihSd_rjwxvIac8kqkj5TkIg3rLODrg

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcThGLPUz7SfnoPUPrFttXiSBuS3NYmV99axgZzgYDofBuo_RpfcUg

 

 

 

http://t3.gstatic.com/images?q=tbn:ANd9GcSqsjlV84iSMlkqfRlTaGiWfn6_nyGg91BQcNLZbGrRnn0-j3S4

 

 

 

http://t1.gstatic.com/images?q=tbn:ANd9GcSwkrLsv_IQh2wUOQ1DkYx-HwxeUOLNEtv8yCh59CnX_HbW5H3q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

☼ Quoi & Où ☼