Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Soucis Unicode & table de caractères

74 views
Skip to first unread message
Message has been deleted

Jean-Claude BELLAMY

unread,
Feb 6, 2008, 3:02:50 AM2/6/08
to
"MCI (ex do ré Mi chel la si do) [MVP]" <enleverl...@OmclaveauO.com> a
écrit dans le message de news:uwV5hoEa...@TK2MSFTNGP02.phx.gbl...
> Bonsoir !
>
> Regardez donc la pièce jointe (ci-dessous).
>
> La frappe "Alt+0156" donne le caractère marqué comme U+0153 (0x9C).
NANNNNNNNNNNNN !
Je ne sais pas ou tu as fait cette capture d'écran, ou si tu l'as bricolée
(;-) ), mais c'est FAUX !
Ce qui suit le "U" est déjà en HEXADÉCIMAL !!!!!
Ce "(0x9C)" est aberrant !
Il eût fallu écrire :
U+0153 (339 décimal)

LA PREUVE : remonte un peu en arrière, et tu verras :
"e dans l'o minuscule" : 0153
"e dans l'o majuscule" : 0152
"o minuscule double accent" : 0151
"o majuscule double accent" : 0150
"o minuscule brève" : 014F <-- le doute n'est plus possible !
"o majuscule brève" : 014E
"o minuscule macron" : 014D
...

Tu as été "enduit plein d'erreur" par la proximité VISUELLE entre
le "0156", qui est la séquence de frappe au pavé numérique,
à savoir les chiffres décimaux 0-1-5-6
et
le RANG UNICODE du caractère exprimé en hexadécimal 0153
!


> Quelqu'un pourrait-il m'éclairer sur la signification de ce truc ?


La frappe d'un caractère via le pavé numérique (avec une séquence ALT 0xxx)
n'est disponible que pour un nombre RESTREINT de caractères, à savoir 255
(en réalité moins, vu que les codes 0 à 31 sont des caractères de contrôle).

P.ex. si on tape ALT+0333, on obtient la lettre "M", ce qui s'explique
facilement : 333 est égal en hexa à 0x14D, et comme un masque ne conserve
que l'octet de poid faible, il est retenu 0x4D, qui est bien le code ANSI
(Latin-1) de la lettre M.

Comme il y a beaucoup plus de caractères UNICODE (en théorie 65535), il NE
PEUT PAS y avoir correspondance biunivoque entre la valeur UNICODE d'un
caractère (plage de 65535 au max) et la valeur que l'on peut taper au pavé
numérique (plage de 255 au max)
NB: en réalité, en raison de l'existence d'autres "plans" UNICODE, on
dépasse actuellement le million de codes différents.

Un grand nombre de caractères UNICODE ne sont pas "tapables" (néologisme !)
au pavé numérique ...

Il n'y a correspondance entre code UNICODE et code ASCII que pour les 127
1ers caractères !
Ainsi, la lettre "A majuscule" a pour code UNICODE U+0041, soit 65 en
décimal, et on peut effectivement la taper au pavé numérique par la séquence
ALT+065.
Cela est un cas évidemment trivial, vu que la touche "A" existe.

Déjà pour les 128 caractères suivants (donc entre UNICODE et ANSI, sur 8
bits) il y a des différences.
Cela est dû, entre autres, au fait que les valeurs UNICODE comprises entre
0x80 et 0x9F ne sont pas utilisées, alors qu'elles le sont en ANSI (8 bits)
!
NB : Je n'ai trouvé nulle part la raison d'être de cette plage non-utilisée
en UNICODE.
P.ex. dans cette plage "non utilisée" en UNICODE, on trouve en ANSI le
fameux "o" (code 0x9C/156), qui se trouve "renvoyé" en UNICODE dans le bloc
"Latin étendu A" (voir plus bas) (code 0x153/339)

Entre 0x9F et 0xFF on retrouve la correspondance
P.ex. le "Ç" (c cédille majuscule), non prévu sur un clavier AZERTY, est
obtenu par la séquence ALT+0199
Et son code UNICODE U+00C7 vaut bien la même chose en décimal : 199


Enfin, bien évidemment, il ne peut y avoir aucune correspondance possible
pour tous les caractères au delà du 256ème.


On a défini en UNICODE plusieurs "blocs", ainsi dénommés :

0x0000 à 0x007F Latin de base (identique à ASCII, sur 7 bits)
0x0080 à 0x009F Non-utilisé (Utilisé en ANSI, sur 8 bits)
0x00A0 à 0x00FF Supplément Latin-1
0x0100 à 0x017F Latin étendu A
0x0180 à 0x024F Latin étendu B
0x0250 à 0x02AF Alphabet phonétique international
0x02B0 à 0x02FF Lettres modificatives avec chasse
0x0300 à 0x036F Diacritiques
...

PS : j'ai beaucoup simplifié, et certains puristes risquent de hurler.
Mais je n'avais pas l'intention (ni le temps) ici de détailler ni la norme
ASCII ISO/CEI 646, ni la norme UNCODE ISO/CEI 10646, ni les différences
entre UTF8, UTF16, ...

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org

Nikita

unread,
Feb 6, 2008, 3:30:15 AM2/6/08
to
Salut,

en fait, x9C est le code hexa de 0156.

Dans Word, tu peux faire le test suivant. Tape
153 suivi immédiatement de ALT C
et sur la ligne suivante
x9C suivi immédiatement de ALT C
dans les 2 cas, tu obtiendras œ

Si tu retapes ALT C avec le curseur juste à droite de ce caractère,
dans les 2 cas tu auras 0153.
Ton logiciel t'indique que les 2 codes sont équivalents. C'est
simplement pas très bien présenté.

Niki


> Bonsoir !
>
> Regardez donc la pièce jointe (ci-dessous).
>
> La frappe "Alt+0156" donne le caractère marqué comme U+0153 (0x9C).

> Or hex(153) = 0x99


>
> Quelqu'un pourrait-il m'éclairer sur la signification de ce truc ?
>

> Merci d'avance

--
Niki


galida

unread,
Feb 6, 2008, 5:24:08 AM2/6/08
to
Bonjour, et merci pour la démonstration.
--
Daniel - galida


MCI (ex do ré Mi chel la si do) [MVP]

unread,
Feb 6, 2008, 10:58:53 AM2/6/08
to
Re !

> Ton logiciel t'indique que les 2 codes sont équivalents. C'est
> simplement pas très bien présenté.

Le "logiciel" en question, c'est la table de caractères de Windows.
ça se présente aussi bien sous Vista que sous XP.

Le problème, c'est : pourquoi, lorsqu'on tape [Alt]+0156, on obtient
le caractère Unicode 0153 ?


@-salutations
--
Michel Claveau


MCI (ex do ré Mi chel la si do) [MVP]

unread,
Feb 6, 2008, 11:05:35 AM2/6/08
to
Salut !

>> La frappe "Alt+0156" donne le caractère marqué comme U+0153 (0x9C).

> NANNNNNNNNNNNN !
> Je ne sais pas ou tu as fait cette capture d'écran, ou si tu l'as
> bricolée (;-) ), mais c'est FAUX !

Cette copie d'écran vient de la "table de caractères" de Windows (Vista
ou XP). Il faut cocher "Affichage Avancé", en bas à gauche.

Quand tu dis "c'est faux", c'est bien ce que je pensais, et c'est mon
soucis.

à noter que cela se produit aussi bien en sélectionnant "Unicode" que
"Windows occidental".

Enfin, l'affichage de la barre d'état est un peu différent, selon que
l'on clique que un caractère, ou que l'on saisisse, dans le champ :
[Alt]+0156


@+

Michel Claveau


MCI (ex do ré Mi chel la si do) [MVP]

unread,
Feb 6, 2008, 11:11:18 AM2/6/08
to
Bonjour !

La dénomination exacte du caractère est :
"Digramme soudé minuscule latin OE"

Mais, ce n'est pas le problème. Ma question, c'est plutôt le décalage
d'information affiché par la "table de caractères".

@+

Michel Claveau


MCI (ex do ré Mi chel la si do) [MVP]

unread,
Feb 6, 2008, 11:12:05 AM2/6/08
to
Bonjour !

> la démonstration.

La démonstration de quoi ? Voir la table de caractères...

@+

Michel Claveau

Message has been deleted

Jean-Claude BELLAMY

unread,
Feb 6, 2008, 1:02:04 PM2/6/08
to
"MCI (ex do ré Mi chel la si do) [MVP]" <enleverl...@OmclaveauO.com> a
écrit dans le message de news:etoCHsNa...@TK2MSFTNGP06.phx.gbl...


Mais je t'ai répondu, scrogneugneu !!!!!
Ne me dis pas que toi non plus tu ne sais pas lire ! ;-)

Cela est du au fait qu'il y a une zone "neutralisée" en UNICODE entre 0x80
et 0x9F, ne contenant AUCUN caractère, alors qu'en ANSI cette plage est
utilisée.
En particulier par le caractère "e dans l'o" , qui a le code ANSI 0x9C
(soit 156 en décimal)
Ce caractère, appelé effectivement "Digramme soudé minuscule latin OE" en
UNICODE, se voit alors relégué à la position 0x0153, soit 339 en décimal.

C'est comme çà, et si cela ne te plait pas, adresse-toi à ceux qui ont
défini la norme ISO/CEI 10646 ! ;-)

Le "décalage d'information" que tu notes est du à la présence de DEUX
systèmes de codage distincts !

"0156", c'est du décimal, en codage ANSI, le seul utilisable avec le pavé
numérique.
"0153", c'est de l'hexadécimal, en codage UNICODE (plage Latin étendu A)

MCI (ex do ré Mi chel la si do) [MVP]

unread,
Feb 6, 2008, 4:40:53 PM2/6/08
to
Bonsoir !


OK, tu as raison. Le caractère (Unicode) 0339 correspond au caractère
(Ansi) 156.

Mais, reconnais que :
- l'affichage de la table de caractères (copie d'écran de mon autre
message) n'est pas bien foutu.
- il fallait savoir que l'API de saisie d'un caractère Unicode, sur
une plage non utilisée, donnait de l'Ansi. AMHA, ce n'est pas normal.
Déjà que, dans l'invite de commande, des fois Windows tronque au premier
octet (par exemple euro 08364), des fois non (par exemple yen 12222).


(Edit : avec Unicode 5, 0x9C une commande C1 : "fin de chaîne")


@-salutations
--
Michel Claveau

MCI (ex do ré Mi chel la si do) [MVP]

unread,
Feb 7, 2008, 2:30:41 AM2/7/08
to
Re !

J'ai oublié de te remercier, pour le truc Alt-C de Word, que je ne
connaissais pas.
(par contre, il fonctionne bizarrement pour les caractères non-ANSI).

@-salutations

Michel Claveau

Nikita

unread,
Feb 7, 2008, 3:10:27 AM2/7/08
to
Salut,

Alt C ne fonctionne que pour l'unicode hexadécimal.

Niki

--
Niki


MCI (ex do ré Mi chel la si do) [MVP]

unread,
Feb 7, 2008, 7:26:44 AM2/7/08
to
Re !

> Alt C ne fonctionne que pour l'unicode hexadécimal.


OK, sans le préfixe "x".
Mais, pourquoi "xaaa" ne passe-t'il pas, alors que "aaa" passe, tout
comme "xbd" (ou "bd") ?

@+
--
Michel Claveau

0 new messages