Discussion:
Probleme unicode
(trop ancien pour répondre)
Donaldo
2004-08-16 23:51:42 UTC
Permalink
Voudrais savoir si c'est possible d'avoir un unicode français dans une
session windows et avoir en mem temps un autre unicode jap dans une
autre session.

Merci d'avance pour votre réponse
Jean-Marc Desperrier
2004-08-17 08:54:01 UTC
Permalink
Xavier Roche wrote:
[suivi redirigé là où il faut]
Post by Donaldo
Voudrais savoir si c'est possible d'avoir un unicode français dans une
Il n'y a pas "d'unicode français", ou de toute autre nationalité.
Unicode est justement un standard créé pour régler de manière définitive
le "cauchemard" des charsets. Unicode englobe le français (iso-latin-1
et suppléments latin1), le japonais (kata, kanjis, y compris des vieux
kanjis tout compliqués que personne comprend), le copte, l'hindi,
l'arménien ancien, le vénusien moderne etc..
La seule question c'est en fait de savoir si vous avez les fontes qui va
avec (une fonte de 200,000 caractères, c'est lourd)
(et au passage le système qi va avec: sous Windows, vous êtes limités au
plan 1 (16-bit, 65K caractères) ; sous Linux, à Unicode au grand complet
(32-bit). c'est pas grave pour le japonais, mais pas mal de caractères
chinois sont après les 65K)
Sous Windows XP le support des seizet d’indirection (surrogates) est
activé automatiquement, sous Win2000, il suffit de modifier une entrée
de la base de registre.

En comparaison, cela demande généralement plus de travail d'en activer
le support sous Linux.
Xavier Roche
2004-08-17 09:03:15 UTC
Permalink
Post by Jean-Marc Desperrier
Sous Windows XP le support des seizet d’indirection (surrogates) est
activé automatiquement, sous Win2000, il suffit de modifier une entrée
de la base de registre.
Oulah. C'est activé pour tous les programmes ?! Ce serait
potentiellement un gros générateur de bugs, dans la mesure où pas mal de
programmes "coupent" violamment les chaînes de WCHAR sans se préoccuper
de la nature des codes (idem pour wcscat(), wcscpy() etc.. qui doivent
allègrement aliaser sur des copies statiques). Ou bien c'est encore un
nouveau jeu de fonctions ?

Le gros interêt de passer en 16-bit, c'est justement éviter le
cauchemard MBCS. Autoriser les surrogates en UCS2, je vois pas l'interêt
(même pour gagner quelques octets) - autant switcher en 32-bit.
Post by Jean-Marc Desperrier
En comparaison, cela demande généralement plus de travail d'en activer
le support sous Linux.
Ben quel interêt ? Si on travaille en mode UCS4 avec des wchar
(sizeof(wchar_t) == 4 sous Linux), les surrogates sont normalement
interdits (c'est quelque part dans la norme), tout comme en UCS2 (sinon
c'est de l'UTF-16). De même, de mémoire, il est interdit d'encoder des
surrogates en UTF-8, et tout ça doit être normalisé à la volée au
besoin, pour avoir de beaux codes complets.
Jean-Marc Desperrier
2004-08-17 11:07:45 UTC
Permalink
Post by Xavier Roche
Post by Jean-Marc Desperrier
Sous Windows XP le support des seizet d’indirection (surrogates) est
activé automatiquement, sous Win2000, il suffit de modifier une entrée
de la base de registre.
Oulah. C'est activé pour tous les programmes ?! Ce serait
potentiellement un gros générateur de bugs, dans la mesure où pas mal de
programmes "coupent" violamment les chaînes de WCHAR sans se préoccuper
de la nature des codes (idem pour wcscat(), wcscpy() etc.. qui doivent
allègrement aliaser sur des copies statiques).
C'est un générateur de bug, mais quand on analyse beaucoup moins qu'on
ne penserait.

Les programmes ne font pas des concaténation ou des copies au hasard au
milieu d'une chaîne, sauf les éditeurs de texte, et là oui, ça va merder
assez sérieusement.

Mais un éditeur de texte lui a de toute façon des problèmes bien plus
complexes à régler pour gérer autre chose que les langues les plus
standards.

Les seizet peuvent donc en réalité être assez transparents pour les
applications et windows l'a démontré à grande échelle.
Post by Xavier Roche
Le gros interêt de passer en 16-bit, c'est justement éviter le
cauchemard MBCS. Autoriser les surrogates en UCS2, je vois pas l'interêt
(même pour gagner quelques octets) - autant switcher en 32-bit.
Tu es dans l'erreur.
Aucun programme ne peut dire supporter Unicode en restant sur le
paradigme de "un point de code" = "une unité de texte indépendante".

Avec ou sans seizet, il est *impossible* de couper une chaîne n'importe
où sans générer des problèmes que serait-ce qu'à cause des diacritiques.

Donc soit un programme ne fait que transferrer des chaînes, et il n'a
pas besoin de réfléchir en réalité, soit il permet à l'utilisateur
d'éditer ces chaînes, et dans ce cas, l'édition correcte (déplacement du
point d'insertion, suppression du bon bloc quand on fait delete) est
très complexe dès qu'on veut gérer tous les cas correctement, et il
ferait mieux de déléguer ce travail à un composant séparé (une librairie
de localisation sous forme de librairie dynamique qu'on pourrait mettre
à jour indépendamment), car il se lance dans quelque chose de toute
façon voué à l'échec.
Post by Xavier Roche
Post by Jean-Marc Desperrier
En comparaison, cela demande généralement plus de travail d'en activer
le support sous Linux.
Ben quel interêt ? Si on travaille en mode UCS4 avec des wchar
(sizeof(wchar_t) == 4 sous Linux), les surrogates sont normalement
interdits (c'est quelque part dans la norme), tout comme en UCS2 (sinon
c'est de l'UTF-16). De même, de mémoire, il est interdit d'encoder des
surrogates en UTF-8, et tout ça doit être normalisé à la volée au
besoin, pour avoir de beaux codes complets.
Quand je parlais de support, je parlais d'un affichage graphique, et de
pouvoir les entrer au clavier.
Le fait que wchar est effectivement en général sur 32 bits sous Unix
n'empèche pas les problèmes dès qu'on va plus loin.
Jean-Marc Desperrier
2004-08-17 11:21:26 UTC
Permalink
Post by Xavier Roche
Le gros interêt de passer en 16-bit, c'est justement éviter le
cauchemard MBCS.
MBCS est un cauchemar pour une raison à laquelle UTF-16 autant que UTF-8
échappent.
En MBCS, on peut se désynchroniser, c'est à dire devant un octet, ne pas
pouvoir déterminer s'il représente la première ou la deuxième moitié
d'un point de code.

Tant en UTF-8 qu'en UTF-16, c'est impossible, les seizet d'indirection
supérieurs utilisent un bloc entièrement séparé de celui des seizet
d'indirection inférieurs, donc ne peuvent jamais être confondus.

Et les problèmes du MBCS sont reliés à cela beaucoup plus qu'au fait
d'avoir des codes de longueur variables en soit.
Xavier Roche
2004-08-17 11:35:25 UTC
Permalink
Post by Jean-Marc Desperrier
En MBCS, on peut se désynchroniser, c'est à dire devant un octet, ne pas
pouvoir déterminer s'il représente la première ou la deuxième moitié
d'un point de code.
Ca au moins c'est pas possible en UTF-8, fort heuresement:

"Table 3.1B. Legal UTF-8 Byte Sequences"
<http://www.unicode.org/unicode/reports/tr28/#3_1_conformance>

Quelque soit la position, on sait que:

00..7F -> Ascii (un caractère)
80..BF -> Inter-séquence UTF-8
C0..C1 -> Illégal (ne doit jamais apparaitre dans un flot UTF-8)
C2..DF -> Début de séquence U+0080..U+07FF
E0 -> '' U+0800..U+0FFF
E1..EC -> '' U+1000..U+CFFF
ED -> '' U+D000..U+D7FF
EE..EF -> '' U+E000..U+FFFF
F0 -> '' U+10000..U+3FFFF
F1..F3 -> '' U+40000..U+FFFFF
F4 -> '' U+100000..U+10FFFF
F5..FF -> Pas encore utilisé

Et notamment on peut toujours savoir si un octet est un inter-séquence,
un début de séquence, ou un caractère unique (ascii)
Post by Jean-Marc Desperrier
d'avoir des codes de longueur variables en soit.
Oui, c'est ca l'embêtant: xxlen(truc) != nombre de caractères.

Mais c'est vrai que le coup des macrons et autres accents est une autre
épine (et je parle pas de comment gérer les caractères décomposés, du
genre un caractère unicode == jusqu'à 4 codes à la suite avec
décomposition - m'étonnerai que Windows gère ça)
Stephane Louise
2004-08-17 21:34:05 UTC
Permalink
Post by Jean-Marc Desperrier
En comparaison, cela demande généralement plus de travail d'en activer
le support sous Linux.
Plus maintenant. Je pense que la plupart des distros sont passées à
unicode par défaut, vu que les différents DE ainsi que le noyau et la
lib C ont le support idoine.
C'est le cas de la debian Sarge, en tout cas, sans rien faire.

mata ne
--
luigi
Erwan David
2004-08-18 06:21:02 UTC
Permalink
Post by Stephane Louise
Post by Jean-Marc Desperrier
En comparaison, cela demande généralement plus de travail d'en
activer le support sous Linux.
Plus maintenant. Je pense que la plupart des distros sont passées à
unicode par défaut, vu que les différents DE ainsi que le noyau et la
lib C ont le support idoine.
C'est le cas de la debian Sarge, en tout cas, sans rien faire.
Non, et heureusement, il y a encore des tas de logiciels qui merdent
en UTF-8...

Par contre ces distribs à la con qui imosent UTF-8 foutent un souk pas
possible quand on fait un ssh dessus...
--
Si vous embauchez, voici mon CV
http://www.rail.eu.org/cv/cv.pdf
Erwan David
2004-08-18 06:22:22 UTC
Permalink
Post by Stephane Louise
Post by Jean-Marc Desperrier
En comparaison, cela demande généralement plus de travail d'en
activer le support sous Linux.
Plus maintenant. Je pense que la plupart des distros sont passées à
unicode par défaut, vu que les différents DE ainsi que le noyau et la
lib C ont le support idoine.
C'est le cas de la debian Sarge, en tout cas, sans rien faire.
Non, et heureusement, il y a encore des tas de logiciels qui merdent
en UTF-8...

Sans compter qu'on n'est jamais tout seul et que pour le partage de
fichier ou l'envoi de news, l'UTF-8 c'est impossible.

Par contre ces distribs à la con qui imposent UTF-8 foutent un souk pas
possible quand on fait un ssh dessus...
--
Si vous embauchez, voici mon CV
http://www.rail.eu.org/cv/cv.pdf
Stephane Louise
2004-08-18 20:50:46 UTC
Permalink
Erwan David wrote:
[linux et unicode]
Post by Erwan David
Non, et heureusement, il y a encore des tas de logiciels qui merdent
en UTF-8...
Oui, certes, dès qu'on sort des applications fondées sur GTK ou QT. Mais
de plus en plus de logiciels utilisent ses bases. Pour les autres, comme
ils n'ont la plupart du temps par de fichiers de localisations
correspondants aux locales UTF-8, ils se retrouvent la plupart du temps
en anglais donc essentiellement de l'ASCII de base.
Post by Erwan David
Par contre ces distribs à la con qui imposent UTF-8 foutent un souk pas
possible quand on fait un ssh dessus...
Moi, ça me fait rire quand je fait un ssh sur ma machine depuis les SUN.
Mais au bout d'un moment je passe effectivement sur un "export LANG=C".

mata ne
--
luigi
Donaldo
2004-08-18 07:13:40 UTC
Permalink
Post by Donaldo
Voudrais savoir si c'est possible d'avoir un unicode français dans une
session windows et avoir en mem temps un autre unicode jap dans une
autre session.
Merci d'avance pour votre réponse
Désolé j'avais pas compris ce qu eje disais.
J'ai créé un nouveau post.

Merci
Loading...