/usr/share/doc/HOWTO/fr-html/Unicode-HOWTO.html is in doc-linux-fr-html 2013.01-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.69">
<title>HOWTO Unicode</title>
</head>
<body>
<h1>HOWTO Unicode</h1>
<h2>Bruno Haible, <a href=
"mailto:haible@clisp.cons.org"><haible@clisp.cons.org></a>,
traduction : Samuel Tribehou, <a href=
"mailto:samuel-tribehou@mail.cpod.fr"><samuel-tribehou@mail.cpod.fr></a><br>
</h2>
v 0.12, 19 Octobre 1999
<hr>
<em>Ce document explique comment configurer votre système
Linux pour qu'il utilise l'encodage de texte UTF-8. Ce document est
en cours d'élaboration. Toutes les astuces, suggestions,
patchs, URLs sont les bienvenus. NDT : Il a été
convenu avec l'auteur que seule la présente version de ce
document serait traduite dans un premier temps, le contenu
changeant pour l'instant trop souvent pour qu'une traduction suivie
puisse être réalisée. Reportez vous au site du
LDP pour obtenir la dernière version.</em>
<hr>
<h2><a name="s1">1. Introduction</a></h2>
<h2><a name="ss1.1">1.1 Pourquoi Unicode ?</a></h2>
<p>Les gens de différents pays utilisent différents
caractères pour représenter les mots de leur langue
natale. De nos jours la plupart des applications, y compris les
logiciels de courrier électronique et les navigateurs,
traitent correctement les caractères 8-bits. Ils peuvent
donc traiter et afficher du texte correctement à condition
qu'il soit représenté dans un jeu de
caractères 8-bits, comme ISO-8859-1.</p>
<p>Il y a bien plus de 256 caractères dans le monde - pensez
au cyrillique, à l'hébreu, à l'arabe, au
chinois, au japonais au coréen et au thaï -, et de
temps à autres, de nouveaux caractères sont
inventés. Les problèmes que cela induit pour les
utilisateurs sont les suivants :</p>
<ul>
<li>Il est impossible de stocker du texte avec des jeux de
caractères différents dans le même document.
Par exemple, je peux citer des journaux russes dans une publication
allemande ou française si j'utilise TeX, xdvi et Postscript,
mais je ne peux pas le faire avec du texte pur.</li>
<li>Tant que chaque document a son propre jeu de caractères,
et que la reconnaissance des jeux de caractères n'est pas
automatique, l'intervention manuelle de l'utilisateur est
inévitable. Par exemple, pour voir la page d'accueil de la
distribution Linux XTeamLinux <a href=
"http://www.xteamlinux.com.cn/">http://www.xteamlinux.com.cn/</a>,
je dois dire à Netscape que la page web est codée en
GB2312.</li>
<li>De nouveaux symboles comme l'Euro sont inventés. ISO a
publié un nouveau standard ISO-8859-15 qui est en gros
identique à ISO-8859-1, excepté qu'il supprime des
caractères rarement utilisés, comme le vieux symbole
monétaire, remplacé par le signe Euro. Si les
utilisateurs acceptent ce standard, ils auront des documents dans
différents jeux de caractères sur leur disque, et
cela deviendra une préoccupation quotidienne. Mais les
ordinateurs devraient simplifier le choses, pas les
compliquer.</li>
</ul>
<p>La solution à ce problème est l'adoption d'un jeu
de caractères universel. Ce jeu de caractères est
Unicode <a href=
"http://www.unicode.org/">http://www.unicode.org/</a>. Pour plus
d'informations sur Unicode, faites <code>man 7 unicode</code> (page
de man contenue dans le package lpdman-1.20).</p>
<h2><a name="ss1.2">1.2 Les encodages d'Unicode</a></h2>
<p>Cela réduit le problème de l'utilisateur (devoir
jongler entre différents jeux de caractères) à
un problème technique : comment transporter les
caractères Unicode en utilisant des octets de 8 bits ?
L'unité de 8 bits est la plus petite unité adressable
de la plupart des ordinateurs et c'est aussi l'unité
utilisée par les connexions réseau TCP/IP. Cependant,
l'utilisation d'un octet pour la représentation d'un
caractère est un accident de l'histoire dû au fait que
le développement de l'ordinateur commença en Europe
et aux États-Unis, où l'on pensait que 96
caractères seraient suffisants pour longtemps.</p>
<p>Il y a fondamentalement quatre façons d'encoder des
caractères Unicode dans des octets :</p>
<dl>
<dt><b>UTF-8</b></dt>
<dd>
<p>128 caractères sont encodés en utilisant 1
octet : les caractères ASCII.<br>
1920 caractères sont encodé en utilisant deux
octets : le latin, le grec, le cyrillique, le copte,
l'arménien, l'hébreu, les caractères
arabes.<br>
63488 caractères sont encodés en utilisant 3 octets,
le chinois et le japonais entre autres.<br>
Les 2147418112 caractères restant (non encore
assignés) peuvent être encodés en utilisant 4,
5 ou 6 caractères. Pour plus d'informations sur UTF-8,
faites <code>man 7 utf-8</code> (cette page est contenue dans le
package ldpman-1.20).</p>
</dd>
<dt><b>UCS-2</b></dt>
<dd>
<p>Chaque caractère est représenté par deux
octets. Cet encodage peut représenter seulement les 65536
premiers caractères d'Unicode.</p>
</dd>
<dt><b>UTF-16</b></dt>
<dd>
<p>C'est une extension d'UTF-2 qui peut représenter 11144112
caractères Unicode. Les 65536 premiers caractères
sont représentés par deux octets, les autres par
quatre.</p>
</dd>
<dt><b>UCS-4</b></dt>
<dd>
<p>Chaque caractère est représenté par 4
octets.</p>
</dd>
</dl>
<p>L'espace nécessaire pour encoder un texte,
comparativement aux encodages actuellement en usage (8 bits par
caractères pour les langues européennes, plus pour le
chinois/japonais/coréen), est le suivant : (Cela a une
influence sur l'espace disque, et la vitesse des communications
réseau.</p>
<dl>
<dt><b>UTF-8</b></dt>
<dd>
<p>Pas de changement pour l'ASCII américain, juste quelques
pourcents supplémentaires pour ISO-8859-1, 50 % de plus pour
le chinois/japonais/coréen, 100 % de plus pour le grec et le
cyrillique.</p>
</dd>
<dt><b>UCS-2 et UTF-16</b></dt>
<dd>
<p>Pas de changement pour le chinois/japonais/coréen,
augmentation de 100 % pour l'US ASCII et ISO-8859-1, le grec et le
cyrillique.</p>
</dd>
<dt><b>UCS-4</b></dt>
<dd>
<p>Augmentation de 100% pour le chinois/japonais/coréen. De
300% pour l'US ASCII et ISO-8859-1, le grec et le cyrillique.</p>
</dd>
</dl>
<p>Étant donné la pénalité pour les
documents américains et européens, causée par
UCS-2, UTF-8 et UCS-4, il semble peu probable que ces encodages
aient un potentiel pour une utilisation à grande
échelle. L'API Win32 Microsoft supporte l'encodage UCS-2
depuis 1995 (au moins), cependant cet encodage n'a pas
été largement adopté pour les documents -SJIS
demeure prédominant au Japon.</p>
<p>D'un autre côté UTF-8 a le potentiel pour une
utilisation à large échelle, puisqu'il ne
pénalise pas les utilisateurs américains et
européens, et que beaucoup de logiciels de "traitement de
texte" (NDT : au sens large) n'ont pas besoin d'être
changés pour supporter UTF-8.<br>
Nous allons maintenant expliquer comment configurer votre
système Linux pour qu'il utilise UTF-8 comme encodage de
texte.</p>
<h3>Notes pour les développeurs C/C++</h3>
<p>L'approche de Microsoft Win32 rend facile pour les
développeurs la production de versions Unicode de leurs
programmes : Vous définissez Unicode ("#define
UNICODE") au début de votre programme, et changez alors un
grand nombre d'occurrences de <code>char</code> en
<code>TCHAR</code> jusqu'à ce que votre programme compile
sans Warnings. Le problèmes est que vous avez au final deux
versions de votre programme : une qui comprend le texte UCS-2
mais pas les encodages 8-bit, et une autre qui ne comprend que les
vieux encodages 8-bit.</p>
<p>En plus, il y a une complication qui affecte UCS-2 et
UCS-4 : l'ordre de la représentation interne des nombre
(``the endianness''). Le registre de systèmes de codage de
caractères de la IANA dit à l'égard de
ISO-10646-UCS-2 : "il faut spécifier l'ordre de la
représentation interne des nombres à
l'intérieur du réseau, le standard ne le
spécifie pas". Cette représentation est "big endian"
en contexte réseau, alors que Microsoft recommande dans ses
outils de développement C/C++ d'utiliser une
représention dépendante de la machine (c.a.d. "little
endian" sur les processeurs ix86), et d'ajouter une marque de
polarité (BOM) au début du document, ou d'utiliser
des heuristiques basées sur la statistique.</p>
<p>D'un autre côté l'approche de UTF-8 garde
<code>char*</code> comme type standard pour le stockage des
chaînes en C. Il en résulte que votre programme
supportera l'US ASCII, indépendamment de toute variable
d'environnement, et supportera les textes encodés en
ISO-8859-1 et UTF-8 à condition que la variable
d'environnement LANG soit positionnée en
conséquence.</p>
<h2><a name="ss1.3">1.3 Liens</a></h2>
<p>La liste de ressources de Markus Kuhn (mise à jour
très régulièrement) :</p>
<ul>
<li><a href=
"http://www.cl.cam.ac.uk/~mgk25/unicode.html">http://www.cl.cam.ac.uk/~mgk25/unicode.html</a></li>
<li><a href=
"http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html">http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html</a></li>
</ul>
<p>Un survol d'Unicode, UTF-8 et des programmes fonctionnant avec
UTF-8 de Roman Czyborra :<br>
<a href=
"http://czyborra.com/utf/#UTF-8">http://czyborra.com/utf/#UTF-8</a></p>
<p>Des exemples de fichiers UTF-8 :</p>
<ul>
<li>Les fichiers <code>quickbrown.txt</code>,
<code>utf-8-test.txt</code>, <code>utf-8-demo.txt</code> dans le
répertoire <code>examples</code> dans le package ucs-fonts
de Markus Kuhn<br>
<a href=
"http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz">http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz</a></li>
<li><a href=
"ftp://ftp.cs.su.oz.au/gary/x-utf8.html">ftp://ftp.cs.su.oz.au/gary/x-utf8.html</a></li>
<li>Le fichier <code>iso10646</code> dans le package trans-1.1.1 de
Kosta Kosti<br>
<a href=
"ftp://ftp.nid.ru/pub/os/unix/misc/trans111.tar.gz">ftp://ftp.nid.ru/pub/os/unix/misc/trans111.tar.gz</a></li>
<li><a href=
"ftp://ftp.dante.de/pub/tex/info/lwc/apc/utf8.html">ftp://ftp.dante.de/pub/tex/info/lwc/apc/utf8.html</a></li>
<li><a href=
"http://www.cogsci.ed.ac.uk/~richard/unicode-sample.html">http://www.cogsci.ed.ac.uk/~richard/unicode-sample.html</a></li>
</ul>
<h2><a name="s2">2. Configuration de l'affichage</a></h2>
<p>Nous supposons que vous avez déjà adapté
votre console Linux et la configuration de X11 à votre
clavier et avez positionné correctement la variable de
localisation LANG. Ceci est expliqué dans le
Danish/International HOWTO, et dans les autres HOWTOS
nationaux : Finish, French, German, Italian, Polish,
Slovenian, Spanish, Cyrillic, Hebrew, Chinese, Thai, Esperanto.
Mais, s'il vous plaît, ne suivez pas le conseil donné
dans le Thai-HOWTO vous disant de faire croire que vous utilisez
des caractères ISO-8859-1 (U0000..U00FF) alors que vous
tapez des caractères Thai (U0E01..U0E5B). Faire cela ne vous
causera que des problèmes lorsque vous passerez à
Unicode.</p>
<h2><a name="ss2.1">2.1 La console Linux</a></h2>
<p>Je ne parle pas tellement de la console ici, parce que je ne
l'utilise que pour rentrer mon login, password, et taper
<code>xinit</code> sur les machines dépourvues de xdm.</p>
<p>Mais revenons à nos moutons : le package kbd-0.99
<a href=
"ftp://sunsite.unc.edu/pub/Linux/system/keyboards/kbd-0.99.tar.gz">ftp://sunsite.unc.edu/pub/Linux/system/keyboards/kbd-0.99.tar.gz</a>,
et une version largement étendue, le package
console-tools-0.2.2<br>
<a href=
"ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-tools-0.2.2.tar.gz">
ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-tools-0.2.2.tar.gz</a>,
contiennent dans le répertoire kbd-0.99/src/ (ou
console-tools-0.22/screenfonttools/) deux programmes :
«unicode_start» et «unicode_stop». Quand
vous appelez «unicode_start», la sortie de la console
est interprétée comme de l'UTF-8. De plus, le clavier
est mis en mode Unicode (voir "man kbd_mode"). Dans ce mode, les
caractères Unicode tapés par Alt-x1...Alt-xn
(où x1...xn sont les chiffres de pavé
numérique) seront émis en UTF-8. Si votre clavier, ou
plus précisément, votre keymap a des touches
correspondant à des caractères non ASCII(comme le
Umlaute allemand), que vous souhaiteriez pouvoir
«CapsLocker», vous devez appliquer au kernel le patch
<a href="linux-2.2.9-keyboard.diff">linux-2.2.9-keyboard.diff</a>
ou <a href=
"linux-2.3.12-keyboard.diff">linux-2.3.12-keyboard.diff</a>.</p>
<p>Vous voudrez probablement afficher des caractères de
différents alphabets sur le même écran. Pour
cela, vous aurez besoin d'une fonte Unicode pour la console.<br>
Le package <a href=
"ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-data-1999.08.29.tar.gz">
ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-data-1999.08.29.tar.gz</a>
contient une fonte (LatArCyrHeb-{08,14,16,19}.psf), qui couvre les
lettres pour le latin, le cyrillique, l'hébreu, et l'arabe.
Il supporte les parties 1, 2, 3, 4, 5, 6, 8, 9, 10 d'ISO-8859
à lui tout seul. Pour l'installer, copiez le dans
/usr/lib/kbd/consolefonts/, et exécutez<br>
<code>/usr/bin/setfont
/usr/lib/kbd/consolefonts/LatArCyrHeb-14.psf</code>.</p>
<p>Si vous voulez que le copier-coller marche avec les consoles
UTF-8, vous aurez besoin du patch <a href=
"linux-2.3.12-console.diff">linux-2.3.12-console.diff</a> d'Edmund
Thomas, Grimley Evans et Stanislav Voronyi.</p>
<h2><a name="ss2.2">2.2 Fontes étrangères pour
X11</a></h2>
<p>N'hésitez pas à installer des fontes cyrilliques,
chinoises, japonaises, etc. Même si ce ne sont pas des fontes
Unicodes, elles aideront à afficher des documents
Unicode : au moins Netscape Communicator 4 et Java feront
usage des fontes étrangères si elles sont
disponibles.</p>
<p>Les programmes suivants sont utiles pour installer des
fontes :</p>
<ul>
<li>"mkfontdir répertoire" prépare un
répertoire de fontes utilisables par le serveur X. Il doit
être exécuté après avoir installé
les fontes dans un répertoire.</li>
<li>"xset fp+ répertoire" ajoute un répertoire au
chemin de fontes actuel du serveur X. Pour que ce soit permanent,
ajoutez une ligne "FontPath" à votre fichier
/etc/XF86Config, dans la section "Files".</li>
<li>"xset fp rehash" doit être exécuté
après avoir appelé mkfontdir sur un répertoire
qui est déjà contenu dans le chemin de fontes actuel
du serveur X.</li>
<li>"xfontsel" vous permet de parcourir les fontes
installées en filtrant selon les diverses
propriétés des fontes.</li>
<li>"xlsfonts -fn motif-de-recherche" liste toutes les fontes qui
correspondent à un motif de recherche. Il affiche aussi
diverses propriétés des fontes. En particulier,
"xlsfonts -ll -fn fonte" liste les propriétés de la
fonte CHARSET_REGISTRY et CHARSET_ENCODING, qui ensemble
déterminent l'encodage de la fonte.</li>
<li>"xfd -fn fonte" affiche une fonte page par page.</li>
</ul>
<p>Les fontes suivantes sont disponibles gratuitement (liste non
exhaustive) :</p>
<ul>
<li>Celle contenues dans XFree86, quelquefois contenues dans un
package séparé. Par exemple, la SuSE a seulement les
fontes 75 dpi normales dans le package "xf86" de base. Les autres
fontes sont dans les packages "xfnt100", "xfntbig", "xfntcyr",
"xfntscl".</li>
<li>Les fontes internationales pour Emacs, <a href=
"ftp://ftp.gnu.org/pub/gnu/intlfonts/intlfonts-1.1.tar.gz">ftp://ftp.gnu.org/pub/gnu/intlfonts/intlfonts-1.1.tar.gz</a>.
Comme il a été mentionné
précédemment, elles sont utiles même si vous
préférez XEmacs à GNU Emacs, ou même si
vous n'utilisez pas Emacs du tout.</li>
</ul>
<h2><a name="ss2.3">2.3 Les fontes Unicode pour X11</a></h2>
<p>Les applications qui souhaitent pouvoir afficher du texte
utilisant différentes alphabets (comme le cyrillique et le
grec) en même temps, peuvent le faire en utilisant les
différentes fontes X pour chaque partie de texte. C'est ce
que font Netscape Communicator et Java. Cependant, cette approche
est plus compliquée, parce que au lieu de travailler avec
"Font" et "XFontStruct", le programmeur devra utiliser "XFonSet",
et aussi parce que toutes les fontes dans le jeu de fontes doivent
avoir les mêmes dimensions.</p>
<ul>
<li>Markus Kuhn a assemblé des fontes à largeur fixe
(fixed width) de 75 dpi avec Unicode couvrant le latin, le grec, le
cyrillique, l'arménien, le géorgien, l'hébreu,
et les écritures symboliques. Elles couvrent les parties 1
à 10 et 13 à 15 de ISO-8859 en un seul jeu de fontes.
Cette fonte est nécessaire pour utiliser un xterm en mode
UTF-8. <a href=
"http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz">http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz</a></li>
<li>Roman Czyborra a assemblé une fonte 8x16/16x16 75 dpi
avec l'encodage Unicode couvrant une partie énorme
d'Unicode. Teléchargez unifont.hex.gz et hex2bdf depuis
<a href=
"http://czyborra.com/unifont/">http://czyborra.com/unifont/</a>
Elle n'est pas à largeur fixe : 8 pixels de large pour
les caractères européens, 16 pour les
caractères chinois. Instructions d'installation :
<blockquote>
<pre>
<code>$ gunzip unifont.hex.gz
$ hex2bdf < unifont.hex > unifont.bdf
$ bdftopcf -o unifont.pcf unifont.bdf
$ gzip -9 unifont.pcf
$ cp unifont.pcf.gz /usr/X11R6/lib/X11/fonts/misc
$ cd usr/X11R6/lib/X11/fonts/misc
$ mkfontdir
$ xset fp rehash
</code>
</pre></blockquote>
</li>
<li>Primoz Peterlin a assemblé un famille de fontes ETL
couvrant le latin, le grec, le cyrillique, l'arménien, le
géorgien, et l'hébreu. <a href=
"ftp://ftp.x.org/contrib/fonts/etl-unicode.tar.gz">ftp://ftp.x.org/contrib/fonts/etl-unicode.tar.gz</a>.
Utilisez le programme "bdftopcf" pour l'installer.</li>
</ul>
<h2><a name="ss2.4">2.4 Unicode xterm</a></h2>
<p>xterm fait partie de X11R6 et XFree86, mais il est maintenu
séparément par Tom Dickey.<br>
<a href=
"http://www.clark.net/pub/dickey/xterm/xterm.html">http://www.clark.net/pub/dickey/xterm/xterm.html</a>.
Les nouvelles versions (patch niveau 109 et plus) supportent la
conversion des touches (keystrokes) en UTF-8 avant de les envoyer
à l'application qui tourne dans le xterm, et l'affichage des
caractères Unicode que l'application renvoie comme une
séquence d'octets UTF-8.</p>
<p>Pour obtenir un xterm UTF-8 fonctionnel, vous devez :</p>
<ul>
<li>Rapatrier <a href=
"http://www.clark.net/pub/dickey/xterm/xterm.tar.gz">http://www.clark.net/pub/dickey/xterm/xterm.tar.gz</a>.</li>
<li>Le configurer en exécutant "./configure
-enable-wide-chars...", puis le compiler et l'installer.</li>
<li>Avoir une fonte Unicode à largeur fixe installée.
ucs-fonts.tar.gz de Markus Kuhn (voir ci-dessus) est fait pour
ça.</li>
<li>Lancer "xterm -u8 -fn fixed". L'option "-u8" enclenche le
support d'Unicode et d'UTF-8. La fonte "fixed" est celle de Markus
Khun.</li>
<li>Jeter un oeil aux fichiers-exemples contenus dans le package
ucs-fonts de Markus Khun :
<blockquote>
<pre>
<code>$ cd .../ucs-fonts
$ cat quickbrown.txt
$ cat utf-8-demo.txt
</code>
</pre></blockquote>
Vous devriez voir (entre autre) des caractères grecs et
cyrilliques.</li>
<li>Pour configurer xterm pour qu'il utilise le support UTF-8
dès le lancement, ajoutez la ligne "XTerm*utf8:1" à
votre $HOME/.Xdefaults (pour vous seul). Je ne recommande pas de
changer directement /usr/X11R6/lib/X11/app-defauts/XTerm, parce que
vos changements seront effacés lorsque vous installerez une
nouvelle version de XFree86.</li>
<li>Si vous avez aussi changé le nom de la fonte, vous aurez
besoin d'une ligne "*VT100*font: votre-fonte" dans votre fichier
$HOME/.Xdefaults. Pour les fontes "fixes" ce n'est pas
nécessaire, puisque "fixed" est la valeur par défaut
de toute façon.</li>
</ul>
<h2><a name="ss2.5">2.5 Divers</a></h2>
<p>Un petit programme qui teste si une console Linux est en mode
UTF-8 peut être trouvé dans le package <a href=
"ftp://sunsite.unc.edu/pub/Linux/system/keyboards/x-lt-1.18.tar.gz">
ftp://sunsite.unc.edu/pub/Linux/system/keyboards/x-lt-1.18.tar.gz</a>
de Ricardas Cepas. Ce sont les fichiers testUTF-8.c et
testUTF8.c.</p>
<h2><a name="s3">3. Configuration des locales</a></h2>
<h2><a name="ss3.1">3.1 Les fichiers et le kernel</a></h2>
<p>Vous pouvez maintenant utiliser n'importe quel caractère
Unicode dans les noms de fichiers. Ni le kernel ni aucun utilitaire
système ne nécessite de modifications. Ceci parce que
les noms de fichiers dans le kernel peuvent être n'importe
quoi qui ne contient ni octet nul, ni '/' (utilisé pour
délimiter les sous-répertoires). Quand ils sont
encodés en utilisant UTF-8, les caractères non-ASCII
ne seront jamais encodés en utilisant un octet nul ou un
slash. La seule conséquence est que les noms de fichiers et
de répertoires occupent plus d'octets qu'ils ne contiennent
de caractères. Par exemple, un nom de fichier contenant cinq
caractères grecs apparaîtra pour le kernel comme un
nom de fichier de 10 octets. Le kernel ne sait pas (et n'a pas
besoin de savoir) que ces octets sont affichés en grec.</p>
<p>C'est une théorie générale, qui est vraie
tant que vos fichiers restent sur un système Linux. Sur les
systèmes de fichiers utilisés depuis d'autres
systèmes d'exploitation, <code>mount</code> possède
des options pour contrôler la conversion des noms de fichiers
de/vers UTF-8 :</p>
<ul>
<li>Les systèmes de fichiers "vfat" ont une option
"utf8".<br>
Voir le fichier <a href=
"file:/usr/src/linux/Documentation/filesystems/vfat.txt">file:/usr/src/linux/Documentation/filesystems/vfat.txt</a>.
Quand vous donnez à mount une option "iocharset"
différente de celle utilisée par défaut (qui
est "iso8859-1"), les résultats avec et sans l'option "utf8"
ne sont pas cohérents. Par conséquent, je ne
conseille pas d'utiliser l'option "iocharset" de mount.</li>
<li>Les systèmes de fichiers "msdos", "umsdos" ont la
même option de montage, mais il semble qu'elle n'ait pas
d'effet.</li>
<li>Le système de fichiers "iso9660" a une option de montage
"utf8".<br>
Voir <a href=
"file:/usr/src/linux/Documentation/filesystems/isofs.txt">file:/usr/src/linux/Documentation/filesystems/isofs.txt</a></li>
<li>À partir des kernels Linux 2.2.x, le système de
fichier "ntfs" a une option de montage"utf8".<br>
Voir <a href=
"file:/usr/src/linux/Documentation/filesystems/ntfs.txt">file:/usr/src/linux/Documentation/filesystems/ntfs.txt</a></li>
</ul>
<p>Les autres systèmes de fichiers (nfs, smbfs, ncpfs, hpfs,
etc.) ne convertissent pas les noms de fichiers. Par
conséquent ils accepteront les noms de fichier Unicode
encodés en UTF-8 seulement si l'autre système
d'exploitation les supporte. Rappelez vous que pour qu'une option
de montage soit appliquée aux prochains montages, vous devez
l'ajouter à la quatrième colonne de la ligne
correspondante dans /etc/fstab.</p>
<h2><a name="ss3.2">3.2 Le kernel et les ttys</a></h2>
<p>Les ttys sont en quelque sorte des tubes bidirectionnels entre
deux programmes, autorisant des choses comme la
répétition (echoing) ou l'édition de la ligne
de commande. Quand dans un xterm, vous exécutez la commande
"cat" sans arguments, vous pouvez entrer et éditer autant de
lignes que vous voulez, elles seront répétées
en retour ligne par ligne. Les actions d'édition du kernel
ne sont pas correctes, en particulier les touche Backspace et Tab
ne seront pas traitées correctement.</p>
<p>Pour résoudre ce problème, vous devez :</p>
<ul>
<li>Appliquer le patch <a href=
"linux-2.0.35-tty.diff">linux-2.0.35-tty.diff</a> ou <a href=
"linux-2.2.9-tty.diff">linux-2.2.9-tty.diff</a> ou <a href=
"linux-2.3.12-tty.diff">linux-2.3.12-tty.diff</a> et recompiler
votre kernel.</li>
<li>Si vous utilisez la glibc2, appliquer le patch <a href=
"glibc211-tty.diff">glibc211-tty.diff</a> et recompiler votre libc.
Si vous n'êtes pas aussi aventureux, il suffit de patcher une
version déjà installée avec le fichier
inclus : <a href="glibc-tty.diff">glibc-tty.diff</a></li>
<li>Appliquer le patch <a href="stty.diff">stty.diff</a> à
GNU sh-utils-1.16b, et recompiler le programme <code>stty</code>.
Testez le ensuite en utilisant <code>stty -a</code> et <code>stty
iutf8</code>.</li>
<li>Ajouter la commande <code>stty iutf8</code> au script
unicode_start, et la commande <code>stty -iutf8</code> au script
unicode_stop.</li>
<li>Appliquer le patch <a href="xterm.diff">xterm.diff</a> à
xterm-109, et recompiler "xterm", puis le tester en lançant
<code>xterm -u8</code> / <code>xterm +u8</code> et en
lançant <code>stty -a</code> et un <code>cat</code>
interactif à l'intérieur.</li>
</ul>
<p>Pour que ce changement soit persistant même à
travers rlogin et telnet, vous devrez aussi :</p>
<ul>
<li>Définir des nouvelles valeurs pour la variable
d'environnement TERM, "linux-utf8" comme alias pour "linux", et
"xterm-utf8" comme alias pour "xterm". Si vous avez la
bibliothèque ncurses sur votre système et la base de
données /usr/lib/terminfo (ou /usr/share/terminfo), faites
cela en éxecutant
<blockquote>
<pre>
<code>$ tic linux-utf8 . terminfo
$ tic xterm-utfu . terminfo
</code>
</pre></blockquote>
sur un compte utilisateur (cela créera les entrées
terminfo dans votre repertoir $HOME/.terminfo). Voilà
<a href="linux-utf8.terminfo">linux-utf8.terminfo</a> et <a href=
"xterm-utf8.terminfo">xterm-utf8.terminfo</a>.<br>
Je ne recommande pas de lancer ces commandes en tant que root,
parce que cela créera les entrées terminfo dans
/urs/lib/terminfo, où, elles seront probablement
effacées lors de la prochaine mise à jour de votre
système. Si votre système possède un fichier
/etc/termcap, vous devriez aussi éditer ce fichier :
copiez les entrées linux et xterm, et donnez leur les
nouveaux noms "linux-utf8" et "xterm-utf8". Le fichier
<a href="termcap.diff">termcap.diff</a> contient un exemple.</li>
<li>À chaque fois que vous appelez "unicode_start" et
"unicode_stop" depuis la console, exécutez aussi "export
TERM =linux-utf8", ou "export TERM=linux", respectivement.</li>
<li>Appliquer le patch <a href="xterm2.diff">xterm2.diff</a>
à xterm-0.9, recompiler "xterm", et et enlever toutes les
lignes "XTerm*termName" des fichiers
/usr/X11R6/lib/X11/app-defaults/XTerm et $HOME/.Xdefaults.
Maintenant xterm donne à TERM la valeur "xterm-utf8"
plutôt que "xterm".</li>
<li>Appliquer les patches <a href="netkit.diff">netkit.diff</a>,
<a href="netkitb.diff">netkitb.diff</a>et <a href=
"telnet.diff">telnet.diff</a> puis recompiler "rlogind" et
"telnetd". Maintenant rlogin et telnet mettent tty en mode
d'édition UTF-8 à chaque fois que la variable
d'environnement TERM est "linux-ut8" ou "xterm-utf8".</li>
</ul>
<h2><a name="ss3.3">3.3 Conversion de données
générales</a></h2>
<p>Vous aurez besoin d'un programme pour convertir vos fichiers
texte locaux (probablement ISO-8859-1) en UTF-8. L'alternative
serait de continuer à utiliser des textes qui utilisent
différents encodages sur la même machine, mais ce
n'est pas une bonne solution sur le long terme. Un de ces
programmes est "iconv", qui est livré avec la glibc-2.1.
Tapez simplement</p>
<blockquote>
<pre>
<code>icon --from-code=ISO-8859-1 --to-code=UTF-8 < vieux_fichier > nouveau_fichier
</code>
</pre></blockquote>
<p>Voici deux scripts shell très pratiques,
appelés "i2u" <a href="i2u.sh">i2u.sh</a> (pour
conversion de ISO à UTF) et "u2i" <a href=
"u2i.sh">u2i.sh</a> (pour conversion de UTF à ISO). [skip
adapt..]</p>
<p>Si vous n'avez pas la glibc-2.1 et iconv installés, vous
pouvez utiliser GNU recode 3.5 à la place. "i2u" <a href=
"i2u_recode.sh">i2u_recode.sh</a> est "recode ISO-8859-1..UTF-8"
"u2i" <a href="u2i_recode.sh">u2i_recode.sh</a> est "recode
UTF-8..ISO-8859-1".<br>
<a href=
"ftp://ftp.iro.umontreal.ca/pub/recode/recode-3.5.tar.gz">ftp://ftp.iro.umontreal.ca/pub/recode/recode-3.5.tar.gz</a><br>
<a href=
"ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz">ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz</a><br>
Notes : vous devez utiliser GNU recode 3.5 ou plus. Pour
compiler GNU recode sur des plateformes sans glibc-2 (c'est
à dire sur toutes les plateformes sauf les systèmes
Linux récents), vous devez le configurer avec
"--disable-nls", autrement l'édition des liens
échouera.</p>
<p>Sinon, vous pouvez aussi utiliser CLISP à la place. Voici
"i2u" et "u2i" en version lisp : <a href="i2u.lsp">i2u.lsp</a>
et <a href="u2i.lsp">u2i.lsp</a>.<br>
Note : Vous devez avoir une version de CLISP qui date au plus
de juillet 1999.<br>
<a href=
"ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz">ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz</a><br>
D'autres programmes de conversion de données existent, mais
ils sont moins puissants que GNU recode. Ce sont</p>
<ul>
<li>"trans"<br>
<a href=
"ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/trans113.tar.gz">
ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/trans113.tar.gz</a></li>
<li>"tcs" qui vient du système d'exploitation
Plan9 :<br>
<a href=
"ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/tcs.tar.gz">
ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/tcs.tar.gz</a></li>
<li>et "utrans/uhtrans/hutrans" par G.Adam Stanislav <a href=
"mailto:adam@whizkidtech.net"><adam@whizkidtech.net></a><br>
<a href=
"ftp://ftp.cdrom.com/pub/FreeBSD/distfiles/i18ntools-1.0.tar.gz">ftp://ftp.cdrom.com/pub/FreeBSD/distfiles/i18ntools-1.0.tar.gz</a></li>
</ul>
<h2><a name="ss3.4">3.4 Les variables d'environnement
locales</a></h2>
<p>Vous pouvez avoir les variables d'environnement suivantes
positionnées, contenant les noms de locales :</p>
<dl>
<dt><b>LANGUAGE</b></dt>
<dd>
<p>Remplacement pour LC_MESSAGES. Seulement utilisé par GNU
gettext.</p>
</dd>
<dt><b>LC_ALL</b></dt>
<dd>
<p>Remplacement pour toute les autres variables
LC_* : </p>
</dd>
<dt><b>LC_CTYPE, LC_MESSAGES, LC_COLLATE, LC_NUMERIC, LC_MONETARY,
LC_TIME</b></dt>
<dd>
<p>Ce sont des variables individuelles pour : le type des
caractères et leur encodage, les messages en langue
maternelle, les règles de classement, le format des nombres,
le format des montants monétaires, l'affichage de la date et
de l'heure.</p>
</dd>
<dt><b>LANG</b></dt>
<dd>
<p>Valeur par défaut pour toutes les variables LC_*</p>
</dd>
</dl>
(Voir `<code>man 7 locale</code>' pour une description
détaillée.)
<p>Chacune des variables LC_* et LANG peuvent contenir un nom de
locale de la forme suivante :</p>
<blockquote>language[_territory[.codeset]][@modifier]</blockquote>
<p>Où <em>language</em> est un code de langue <a href=
"ISO_639">ISO 639</a> (en minuscules), <em>territory</em> est un
code de pays <a href="ISO_3166">ISO 3166</a> (en majuscules),
<em>codeset</em> désigne une table de caractères, et
<em>modifier</em> d'autres attributs particuliers (par pour exemple
indiquer un dialecte particulier d'une langue, ou une orthographe
non standard).</p>
<p>LANGUAGE peut contenir plusieurs noms de locale,
séparés par deux points (:).</p>
<p>Pour dire à votre système et à toutes les
applications que vous utilisez UTF-8, vous devez ajouter un suffixe
d'UTF-8 à vos noms de locales. Par exemple, si vous
utilisiez</p>
<blockquote>
<pre>
<code>LANGUAGE=de:fr:en
LC_CTYPE=de_DE
</code>
</pre></blockquote>
<p>vous le changeriez en</p>
<blockquote>
<pre>
<code>LANGUAGE=de.UTF-8:fr.UTF-8:en.UTF-8
LC_CTYPE=de_DE.UTF-8
</code>
</pre></blockquote>
<h2><a name="ss3.5">3.5 Créer les fichiers pour le support
des locales</a></h2>
<p>Si vous avez la glibc-2.1 ou glibc-2.1.1 ou glibc-2.1.2
installée, vérifiez d'abord en utilisant "localedef
-help" que le répertoire système pour le tables de
caractères est /usr/share/i18n/charmaps. Puis appliquez au
fichier /usr/share/i18n/charmaps/UTF8 le patch <a href=
"glibc21.diff">glibc21.diff</a> ou <a href=
"glibc211.diff">glibc211.diff</a> ou <a href=
"glibc212.diff">glibc212.diff</a>, respectivement. Puis
créez les fichiers de support pour toute les locales UTF-8
que vous voulez utiliser, par exemple :</p>
<blockquote>
<pre>
<code>$ localedef -v -c -i de_DE -f UTF8 /usr/share/locale/de_DE.UTF-8
</code>
</pre></blockquote>
<p>Généralement vous n'avez pas besoin de
créer des variables appelées "de" ou "fr" sans
suffixe pour le code du pays, parce que ces locales sont
normalement utilisées seulement par la variable LANGUAGE, et
pas par les variables LC_*. De plus LANGUAGE est seulement
utilisé en remplacement de LC_MESSAGES.</p>
<h2><a name="ss3.6">3.6 Ajouter le support pour la
bibliothèque C</a></h2>
<p>La glibc-2.2 supportera les locales multi-octets (de plusieurs
octets), en particulier les locales UTF-8 créées plus
haut. Mais les glibc-2.1 et 2.1.1 ne la supportent pas
réellement. Par conséquent le seul effet réel
de la création des fichiers /usr/local/share/de_DE.UTF-8/*
ci dessus est que <code>setlocale(LC_ALL,"")</code> retournera
"de_DE.UTF-8", conformément à vos variables
d'environnement, au lieu d'enlever le suffixe "UTF-8".</p>
<p>Pour ajouter le support pour la locale UTF-8, vous devriez
compiler et installer la bibliothèque 'libutf8_plug.so',
depuis <a href="libutf8-0.5.2.tar.gz">libutf8-0.5.2.tar.gz</a>.
Puis vous pouvez positionner la variable d'environnement LD_PRELOAD
pour qu'elle pointe sur la bibliothèque
installée :</p>
<blockquote>
<pre>
<code>export LD_PRELOAD=/usr/local/lib/libutf8_plug.so
</code>
</pre></blockquote>
Alors, dans chaque programme lancé avec cette variable
d'environnement positionnée, les fonctions de
libutf8_plug.so seront appelées à la place des
originales dans /lib/libc.so.6. Pour plus d'informations sur
LS_PRELOAD, voyez "man 8 ld.so".
<p>Tout cela ne sera plus nécessaire quand la glibc-2.2
sortira.</p>
<h2><a name="ss3.7">3.7 Conversion des catalogues de
messages</a></h2>
<p>Maintenant ajoutons un contenu à ces nouvelles locales.
Les commandes /bin/sh suivantes convertiront vos catalogues de
messages au format UTF-8. Elles doivent être lancées
en tant que root, et nécessitent les programmes 'msgfmt' et
'msgunfmt' de GNU gettext-0.10.35 <a href=
"convert-msgcat.sh">convert-msgcat.sh</a>.<br>
Ceci non plus ne sera plus nécessaire une fois que la
glibc-2.2 sera sortie, parce qu'alors la fonction gettext
convertira les chaînes de caractères de façon
appropriée depuis la table de caractères du
traducteur vers la table de caractères de l'utilisateur, en
utilisant soit iconv soit librecode.</p>
<h2><a name="s4">4. Applications spécifiques.</a></h2>
<h2><a name="ss4.1">4.1 Le réseau</a></h2>
<h3>rlogin</h3>
<p>Marche bien avec les patches mentionnés
précédemment.</p>
<h3>telnet</h3>
<p>Telnet n'est pas ne traite pas les caractères 8-bits (il
n'est pas"8-bit-clean") par défaut. Pour pouvoir envoyer des
codes de touches Unicode à un hôte distant, vous devez
mettre telnet en mode "outbinary". Il y a deux façons de
faire cela : </p>
<blockquote>
<pre>
<code>$ telnet -L <hote>
</code>
</pre></blockquote>
<p>et</p>
<blockquote>
<pre>
<code>$telnet
telnet> set outbinary
telnet> open <hote>
</code>
</pre></blockquote>
<p>en outre, utilisez les patches mentionnés
précédemment.</p>
<h2><a name="ss4.2">4.2 Les navigateurs</a></h2>
<h3>Netscape</h3>
<p>Netscape 4.05 ou plus peut afficher des documents HTML en
encodage UTF-8. Tout ce qu'un document nécessite est la
ligne suivante, située entre les tags <head> et
</head></p>
<blockquote>
<pre>
<code><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</code>
</pre></blockquote>
Netscape 4.05 ou plus peut aussi afficher du HTML et du texte en
encodage UCS-2 avec le [byte-order mark]. <a href=
"http://www.netscape.com/computing/download/">http://www.netscape.com/computing/download/</a>
<h3>Lynx</h3>
<p>Lynx 2.8 a un écran d'options (touche 'O') qui permet de
sélectionner la table de caractères utilisée
à l'affichage. Quand il, tourne dans un xterm ou depuis une
"Linux console" en mode UTF-8, sélectionnez "UNICODE
UTF-8".</p>
<p>Maintenant, encore une fois, tout ce qu'un document
nécessite est la ligne suivante, entre les tags <head>
et </head> :</p>
<blockquote>
<pre>
<code><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</code>
</pre></blockquote>
<p>Quand vous visualisez des fichiers texte encodés en
UTF-8, vous devez aussi passer à la ligne de commande
l'option "-assume_local_charset=UTF-8" (affecte seulement les
URLs de type file:/...) ou "-assume_charset=UTF-8" (affecte toute
les URLs). Sinon, dans Lynx-2.2.8, vous pouvez, dans l'écran
d'options, changer le jeu de caractères supposé par
défaut ("assumed document character set") en "utf-8".</p>
<p>Il y a aussi, dans l'écran d'options, une option
permettant de choisir le jeu de caractères par défaut
("preferred document character set"), mais cela n'a pas d'effet, au
moins avec les URLs file:/... et http://... servies par
apache-1.3.0.</p>
<p>Cependant, il y a un problème concernant les espaces et
les fins de lignes : regardez à la section russe de
x-utf-8.html, ou utf-8-demo.txt.</p>
<p>Notez aussi que dans Lynx-2.8.2, configuré avec l'option
-enable-prettysrc, les jolies combinaisons de couleurs ne marchent
plus correctement quand le jeu de caractères pour
l'affichage à été positionné à
"UNICODE-UTF-8". Ce problème est résolu par le patch
<a href="lynx282.diff">lynx282.diff</a>.</p>
<p>D'après les développeurs de lynx : "Pour une
utilisation sérieuse de l'affichage UTF-8 avec Lynx, il est
toujours recommandé de compiler avec la bibliothèque
slang et -DSLANG_MBCS_HACK."<br>
<a href=
"ftp://ftp.gnu.org/pub/gnu/lynx/lynx-2.8.2.tar.gz">ftp://ftp.gnu.org/pub/gnu/lynx/lynx-2.8.2.tar.gz</a><br>
<a href="http://lynx.browser.org/">http://lynx.browser.org/</a><br>
<a href=
"http://www.slcc.edu/lynx/">http://www.slcc.edu/lynx/</a><br>
<a href="ftp://lynx.isc.org/">ftp://lynx.isc.org/</a></p>
<h3>Pages de test</h3>
<p>Des pages de test pour les navigateurs peuvent être
trouvées sur les pages d'Alan Wood et James Kass :<br>
<a href=
"http://www.hclrss.demon.co.uk/unicode/#links">http://www.hclrss.demon.co.uk/unicode/#links</a>,
<a href=
"http://home.att.net/~jameskass/">http://home.att.net/~jameskass/</a></p>
<h2><a name="ss4.3">4.3 Les éditeurs</a></h2>
<h3>yudit</h3>
<p>Le programme <code>yudit</code> de Gáspár Sinai
<a href="http://czyborra.com/yudit/">http://czyborra.com/yudit/</a>
est un éditeur de texte unicode de premier ordre pour le
système X Window. Il supporte le traitement simultané
de beaucoup de langages, méthodes d'entrée,
conversions de caractères locaux standards. Il est
équipé pour supporter l'entrée de texte dans
tous les langages avec seulement un clavier anglais, en utilisant
des tables de configuration du clavier.</p>
<p>Il peut être compilé en 3 versions : interface
graphique Xlib , KDE, ou Motif.</p>
<p>Il peut être personnalisé très facilement.
Typiquement, vous voudrez modifier votre fonte. Depuis le menu font
je choisis "Unicode". Puis, puisque la commande "xlsfonts
'*_*-iso10646-1" donnait toujours un affichage ambigu, je choisis
un taille de fonte de 13 (pour correspondre à la fonte fixe
de 13 pixels de Markhus Kuhn).</p>
<p>Ensuite, vous personnaliserez votre méthode
d'entrée. Les méthodes "Straight", "Unicode" et
"SGML" sont les plus intéressantes. Pour avoir des
détails sur les autres méthodes d'entrées
incorporées, regardez dans
"/usr/local/share/yudit/data/".</p>
<p>Pour qu'un changement devienne un réglage par
défaut pour les prochaines sessions, éditez votre
fichier $HOME/.yuditrc.</p>
<p>Les fonctionnalités générales de
l'éditeur sont limitées à l'édition, le
copier-coller, et le "chercher-remplacer" (search&replace). Pas
de fonction d'annulation (undo).</p>
<h3>mined98</h3>
<p><code>mined98</code> est un petit éditeur de texte de
Michiel Huisjes, Achim Müller et Thomas Wolff : <a href=
"http://www.inf.fu-berlin.de/~wolff/mined.html">http://www.inf.fu-berlin.de/~wolff/mined.html</a>.
Il vous permet d'éditer des fichier encodés en UTF-8
ou 8 bits, dans un xterm UTF-8 ou 8-bits. Il dispose aussi de
puissantes fonctionnalités pour entrer les caractères
Unicode.</p>
<p>Quand mined est lancé dans un xterm ou une console Linux
en mode UTF-8, vous devriez positionner la variable d'environnement
<code>utf8_term</code>, ou appeler mined avec l'option
<code>-U</code>.</p>
<p>mined vous permet d'éditer des fichiers encodés
aussi bien en UTF-8 qu'en 8-bits. Par défaut il utilise un
heuristique d'auto-détection. Si vous ne voulez pas vous
reposer sur des heuristiques, passez l'option <code>-u</code>
à la ligne de commande lorsque vous éditez un fichier
UTF-8, ou <code>+u</code> lorsque vous éditez un fichier
encodé en 8 bits. Vous pouvez changer
l'interprétation à n'importe quel moment depuis
l'éditeur : il affiche l'encodage ("L:h" pour du
8-bits, "U:h" pour de l'UTF-8) dans la ligne de menu. Vous pouvez
cliquer sur le premier de ces caractères pour le
changer.</p>
<p>Quelques bémols :</p>
<ul>
<li>Le binaire Linux dans la distribution est dépassé
et ne supporte pas UTF-8. Vous devrez recompiler un binaire
à partir des sources. Installez ensuite src/mined dans
/usr/local/bin/mined et doc/mined.help dans
/usr/local/man/cat1/mined.1, de façon à ce que
<code>ESC h</code> le trouve.</li>
<li>mined ignore votre réglage "stty erase". Quand votre
touche backspace renvoie un code ASCII 127, et que vous avez
positionné "stty erase ^?" - ce qui est finalement le
réglage le plus sûr - vous devez appeler mined avec
l'option <code>-B</code> de façon à ce que la touche
backspace efface le caractère à gauche du
curseur.</li>
<li>Les touches "Home", "End", "Delete" ne marchent pas.</li>
</ul>
<h3>vim</h3>
<p><code>vim</code> (depuis la version 5.4m) supporte les locales
multi-octets, mais seulement si la bibliothèque X a le
même support, et seulement pour les encodages avec au moins
deux octets par caractères, i.e les encodages ISO-2022. Il
ne supporte pas l'UTF-8.</p>
<h3>emacs</h3>
<p>Avant tout, vous devriez lire la section "International
Character Set Support" (noeud "International") dans le manuel
d'Emacs. En particulier, notez que vous devez démarrer Emacs
avec la commande</p>
<blockquote>
<pre>
<code>$ emacs -fn fontset-standard
</code>
</pre></blockquote>
pour qu'il utilise un jeu de fontes comprenant beaucoup de
caractères internationaux.
<p>À court terme, le package emacs-utf <a href=
"http://www.cs.ust.hk/faculty/otfried/Mule/">http://www.cs.ust.hk/faculty/otfried/Mule/</a>
d'Otfried Cheong procure un "unicode-utf-8" pour Emacs.
Après avoir compilé le programme "utf2mule" et
l'avoir installé quelque part dans votre $PATH, installez
aussi unicode.el, muleuni-1.el, unicode_char.el quelque part, et
ajoutez les lignes</p>
<blockquote>
<pre>
<code> (setq load-path (cons "/home/user/somewhere/emacs" load-path))
(if (not (string-match "XEmacs" emacs-version))
(progn
(require 'unicode)
(if (eq window-system 'x)
(progn
(create-fontset-from-fontset-spec
"-misc-fixed-medium-r-normal-*-12-*-*-*-*-*-fontset-standard")
(create-fontset-from-fontset-spec
"-misc-fixed-medium-r-normal-*-13-*-*-*-*-*-fontset-standard")
(create-fontset-from-fontset-spec
"-misc-fixed-medium-r-normal-*-14-*-*-*-*-*-fontset-standard")
(create-fontset-from-fontset-spec
"-misc-fixed-medium-r-normal-*-15-*-*-*-*-*-fontset-standard")
(create-fontset-from-fontset-spec
"-misc-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard")
(create-fontset-from-fontset-spec
"-misc-fixed-medium-r-normal-*-18-*-*-*-*-*-fontset-standard")))))
</code>
</pre></blockquote>
<p>à votre $HOME/.emacs. Pour activer un des jeux de fontes,
utilisez l'item "Set Font/FonSet" du menu mule, ou
Shift-down-mouse-1. Pour l'instant les jeux de fontes avec des
hauteurs de 15 et 13 ont le meilleur support Unicode, grâce
aux fontes 9x15 et 6x13 de Markus Kuhn. Pour ouvrir un fichier
encodé en UTF-8, vous pouvez taper</p>
<blockquote>
<pre>
<code>M-x universal-coding-system-argument unicode-utf8 RET
M-x find-file filename RET
</code>
</pre></blockquote>
ou
<blockquote>
<pre>
<code>C-x RET c unicode-utf8 RET
C-x C-f filename RET
</code>
</pre></blockquote>
<p>Notez que cela marche avec Emacs seulement en mode
fenêtre, pas en mode terminal.</p>
<p>Richard Stallman prévoit à long terme d'ajouter un
support d'UTF-8 intégré à Emacs.</p>
<h3>Xemacs</h3>
<p>(Cette section est écrite par Gilbert Baumann.)</p>
<p>Voici comment apprendre à XEmacs (20.4 configuré
avec MULE) l'encodage UTF-8. Malheureusement vous aurez besoin des
sources pour pouvoir le patcher.</p>
<p>D'abord vous aurez besoin de ces fichiers fournis par Tomohiko
Morioka :</p>
<p><a href=
"http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-21.0-b55-emc-b55-ucs.diff">
http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-21.0-b55-emc-b55-ucs.diff</a></p>
<p><a href=
"http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-ucs-conv-0.1.tar.gz">
http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-ucs-conv-0.1.tar.gz</a></p>
<p>Le .diff est un diff pour les sources C. Le tarball contient du
code elisp, qui fournit beaucoup de tables de code qui permettent
la conversion depuis et vers Unicode. Comme le nom du diff le
suggère, il est prévu pour XEmacs-21. J'ai eu besoin
d'aider un peu 'patch'. La différence la plus notable avec
mes sources XEmacs-20.4 est que file-coding.[ch] était
appelé mule-coding.[ch]</p>
<p>Pour ceux qui connaissent peu XEmacs-MULE (comme moi) voici un
guide rapide :</p>
<p>Ce que nous appelons un encodage est appelé par MULE
"coding system". Les commandes les plus importantes sont :</p>
<blockquote>
<pre>
<code>M-x set-file-coding-system
M-x set-buffer-process-coding-system [comint buffer]
</code>
</pre></blockquote>
<p>et la variable 'file-coding-system-alist', qui guide 'find-file'
pour qu'il trouve l'encodage utilisé. Une fois que tout
marchait, la première chose que j'ai faite fut <a href=
"gb-hacks.el">ceci</a>.</p>
<p>Ce code cherche une ligne de mode spéciale
commençant par _*_ quelque part dans les 600 premiers octets
du fichier qui va être ouvert. Si cette ligne contient un
champ "Encoding: xyz;" et que l'encodage xyz ("coding system" dans
le langage d'Emacs) existe, il le sélectionne. Donc
maintenant vous pouvez utiliser :</p>
<blockquote>
<pre>
<code>;;; _*_ Mode: Lisp; Syntax: Common-Lisp; Package: CLEX; Encoding:
utf-8; _*_
</code>
</pre></blockquote>
<p>et Emacs entrera en mode utf-8 à partir de là.</p>
<p>Une fois que tout marchait, j'ai défini une macro pour
\u03BB (lambda grec) comme ceci : </p>
<blockquote>
<pre>
<code>(defmacro \u03BB (x) '(lambda .,x))
</code>
</pre></blockquote>
<h3>nedit</h3>
<h3>xedit</h3>
<p>En théorie, <code>xedit</code> devrait être capable
d'éditer des fichiers UTF-8 si vos locales sont
configurées en conséquence (voir au dessus), et que
vous ajoutez la ligne "Xedit*international: true" à votre
fichier $HOME/.Xdefaults. En pratique, il reconnaîtra
les encodages UTF-8 des caractères non ASCII, mais il les
affichera comme des séquences de caractères "@".</p>
<h3>axe</h3>
<p>En théorie, <code>axe</code> devrait être capable
d'éditer des fichiers UTF-8 si vos locales sont
configurées en conséquence (voir au dessus), et que
vous ajoutez la ligne "Axe*International: true" à votre
fichier $HOME/.Xdefaults. En pratique, il vous laissera simplement
un joli fichier core.</p>
<h3>pico</h3>
<h3>TeX</h3>
<p>Les distributions de teTex 0.9 (et supérieures)
contiennent une adaptation Unicode de TeX, appelée Omega (
<a href=
"http://www.gutenberg.eu.org/omega/">http://www.gutenberg.eu.org/omega/</a>
<a href=
"ftp://ftp.ens.fr/pub/tex/yannis/omega">ftp://ftp.ens.fr/pub/tex/yannis/omega</a>),
mais est-ce que quelqu'un connaîtrait un tutorial sur ce
système ?</p>
<p>Autres liens peut-être en rapport :<br>
<a href=
"http://www.dante.de/projekte/nts/NTS-FAQ.html">http://www.dante.de/projekte/nts/NTS-FAQ.html</a>,<br>
<a href=
"ftp://ftp.dante.de/pub/tex/language/chinese/CJK/">ftp://ftp.dante.de/pub/tex/language/chinese/CJK/</a></p>
<h2><a name="ss4.4">4.4 Les logiciels de courrier
électronique</a></h2>
<p>MIME : RFC 2279 définit les jeux de
caractères UTF-8 et MIME, qui peuvent être convertis
en encodage 8-bits, quoted-printable ou base64. L'ancienne norme
MIME UTF-7 (RFC 2152) est considérée comme
étant obsolète ("deprecated") et ne devrait plus
être utilisée.</p>
<p>Les clients mail sortis après le 1er janvier 1999
devraient être capables d'envoyer et d'afficher des courriers
encodés en UTF-8, sous peine d'être
considérés comme incomplets. Mais ces courriers
doivent contenir les étiquettes (labels) MIME :</p>
<blockquote>
<pre>
<code>Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8-bit
</code>
</pre></blockquote>
<p>Envoyer simplement un fichier UTF-8 vers "mail" via un
<em>pipe</em> sans faire attention aux labels MIME ne fonctionnera
pas. Les gens qui implémentent des clients de courrier
devraient jeter un oeil à <a href=
"http://www.imc.org/imc-intl/">http://www.imc.org/imc-intl/</a> et
<a href=
"http://www.imc.org/mail-i18n.html">http://www.imc.org/mail-i18n.html</a></p>
<p>Parlons maintenant des clients mail individuels (ou "mail user
agents") :</p>
<h3>pine</h3>
<p>La situation pour une version non patchée de pine 4.10
est la suivante.</p>
<p>Pine ne fait pas de conversion de jeu de caractères. Mais
il vous permet de voir des courriers UTF-8 dans une fenêtre
texte UTF-8 (console Linux ou xterm).</p>
<p>Normalement, Pine se plaindra du fait qu'il y a
différents jeux de caractères à chaque fois
que vous visualiserez un courrier encodé en UTF-8. Pour vous
débarrasser de cet avertissement, choisissez S (setup), puis
C (config), et changez la valeur de "character set" à UTF-8.
Cette option ne fera rien à part réduire le nombre
d'avertissements, puisque Pine ne connaît pas UTF-8 en
interne.</p>
<p>Notez aussi que pour Pine la notion de caractères Unicode
est très limitée : il affichera les
caractères latins et grecs, mais ce sont les seuls types de
caractères Unicode qu'il connaît.</p>
<p>Un patch de Robert Brady <a href=
"http://www.ents.susu.soton.ac.uk/~robert/pine-utf8-0.1.diff">http://www.ents.susu.soton.ac.uk/~robert/pine-utf8-0.1.diff</a>
ajoute à Pine un support UTF-8. Avec ce patch, il peut
décoder et afficher les entêtes et le corps des
messages correctement. Ce patch nécessite GNOME libunicode
<a href=
"http://cvs.gnome.org/lxr/source/libunicode/">http://cvs.gnome.org/lxr/source/libunicode/</a>.</p>
<h3>Kmail</h3>
<p>Kmail (comme tout KDE 1.0) ne contient absolument aucun support
pour les mails en UTF-8.</p>
<h3>Netscape Communicator</h3>
<p>Le Messenger de Netscape Communicator peut envoyer et afficher
des mails encodés en UTF-8, mais cela nécessite
quelques interventions manuelles de l'utilisateur.</p>
<p>Pour envoyer un mail encodé en UTF-8 : après
avoir ouvert la fenêtre "Compose", mais avant de commencer
à composer le message, sélectionnez dans le menu
"View -> Character Set ->Unicode (UTF-8)" puis composez votre
message et envoyez le.</p>
<p>Quand vous recevez un courrier encodé en UTF-8, Netscape
ne l'affiche malheureusement pas en UTF-8 directement, et ne donne
même pas un indice visuel montrant que le courrier a
été encodé en UTF-8. Vous devez
sélectionner manuellement l'option adéquate dans
"View -> Character Set -> Unicode (UTF-8)". Pour afficher les
courriers UTF-8, Netscape utilise des fontes
différenciées. Vous pouvez ajuster la fonte
utilisée dans la boîte de dialogue "Edit ->
Preferences -> Fonts". Choisissez la catégorie de fontes
"Unicode".</p>
<h3>Emacs (rmail, vm)</h3>
<h2><a name="ss4.5">4.5 Autres applications en mode texte</a></h2>
<h3>less</h3>
<p>Teléchargez <a href=
"ftp://ftp.gnu.org/pub/gnu/less/less-340.tar.gz">ftp://ftp.gnu.org/pub/gnu/less/less-340.tar.gz</a>
et appliquez le patch <a href=
"less-340-utf-2.diff">less-340-utf-2.diff</a> de Robert Brady
<a href=
"mailto:rwb197@ecs.soton.ac.uk"><rwb197@ecs.soton.ac.uk></a>.
Puis positionnez la variable d'environnement LESSCHARSET :</p>
<blockquote>
<pre>
<code>export LESSCHARSET=utf-8
</code>
</pre></blockquote>
Si vous avez positionné une variable d'environnement
LESSKEY, vérifiez aussi que le fichier vers lequel elle
pointe ne définit pas LESSCHARSET. Si nécessaire,
régénérez ce fichier en utilisant la commande
'lesskeys', ou enlevez la variable d'environnement LESSKEYS.
<h3>expand, wc</h3>
<p>Procurez vous GNU textutils-2.0 et appliquez le patch <a href=
"textutils-2.0.diff">textutils-2.0.diff</a>, puis lancez
configure.<br>
Ajoutez "#define HAVE_MBRTOWC 1", "#define HAVE_FPUTWC 1" à
config.h. Dans src/Makefile, modifiez CFLAGS et LDFLAGS pour qu'ils
incluent les répertoires où libutf8 est
installé, puis recompilez.</p>
<h3>col, colcrt, colrm, column, rev, ul</h3>
<p>Procurez vous le package util-linux-2.9y, configurez le, puis
définissez ENABLE_WIDECHAR dans defines.h , changez le "# if
0" en "# if 1" dans lib/widechar.h. dans text-utils/Makefile,
modifiez CFLAGS et LDFLAGS pour qu'ils incluent les
répertoires où libutf8 est installé. Puis
recompilez.</p>
<h3>figlet</h3>
<p>Figlet 2.2 a une option pour gérer l'entrée en
UTF-8 : "figlet -C utf-8".</p>
<h3>kermit</h3>
<p>Le programme de communication série C-Kermit <a href=
"http://www.columbia.edu/kermit/">http://www.columbia.edu/kermit/</a>,
dans les versions 7.0beta10 et supérieures, comprend les
encodages de fichier et de transfert UTF-8 et UCS-2, et l'encodage
de terminal UTF-8. La documentation de ces caractéristiques
peut être trouvée à <a href=
"ftp://kermit.columbia.edu/kermit/test/text/ckermit2.txt">ftp://kermit.columbia.edu/kermit/test/text/ckermit2.txt</a></p>
<h2><a name="ss4.6">4.6 Autres applications X11</a></h2>
<p>La Xlib de X11 ne peut malheureusement pas encore localiser
UTF-8, cela devrait être travaillé prochainement.</p>
<h2><a name="s5">5. Comment faire pour que vos programmes
comprennent Unicode</a></h2>
<h2><a name="ss5.1">5.1 C/C++</a></h2>
<p>Le type C '<code>char</code>' est 8-bits et restera 8-bits parce
qu'il désigne la plus petite unité de données
adressable. Divers aménagements sont
disponibles : </p>
<h3>Pour le traitement de texte normal</h3>
<p>Le standard ISO/ANSI C contient, dans une correction qui fut
ajoutée en 1995, un type de caractère codé sur
16 bits `<code>wchar_t</code>', un ensemble de fonctions comme
celles contenues dans <code><string.h></code> et
<code><ctype.h></code> (déclarées
respectivement dans <code><wchar.h></code> et
<code><wctype.h></code>), et un ensemble de fonctions de
conversion entre `<code>char *</code>' et `<code>wchar_t *</code>'
(déclarées dans <code><stdlib.h></code>).</p>
<p>Voici de bonnes réferences pour cette interface de
programmation :</p>
<ul>
<li>Le manuel de GNU libc-2.1, chapitres 4 "Characters Handling" et
6 "Character Set Handling"</li>
<li>Les pages de manuel <a href=
"man-mbswcs.tar.gz">man-mbswcs.tar.gz</a></li>
<li>La référence de la bibliothèque C
Dinkumware <a href=
"http://www.dinkumware.com/htm_cl/">http://www.dinkumware.com/htm_cl/</a></li>
<li>La spécification Single Unix d'OpenGroup <a href=
"http://www.UNIX-systems.org/online.html">http://www.UNIX-systems.org/online.html</a></li>
</ul>
<p>Avantages de cette interface de programmation :</p>
<ul>
<li>C'est un standard non propriétaire.</li>
<li>Ces fonctions font ce qu'il faut, selon les locales de
l'utilisateur. Tout ce qu'un programme doit faire est d'appeler
<code>setlocale(LC_ALL,"");</code>.</li>
</ul>
<p>Inconvénients de cette interface de
programmation :</p>
<ul>
<li>Certaines de ces fonctions ne sont pas "multithread-safe" parce
qu'elles conservent un état interne caché entre les
appels de fonction.</li>
<li>Il n'y a pas de type de donnée de première
classe. Par conséquent cette API ne peut pas être
utilisée raisonnablement pour tout ce qui nécessite
plus d'une locale ou d'un jeu de caractères au même
moment.</li>
<li>La plupart des systèmes d'exploitation ont un mauvais
support de cette interface de programmation.</li>
</ul>
<h3>Notes concernant la portabilité</h3>
<p>Une variable `<code>wchar_t</code>' peut être
encodée en Unicode ou non. Ceci dépend de la
plateforme et quelquefois aussi des locales. Une séquence
multi-octets `<code>wchar_t</code>' peut être encodée
en UTF-8 ou non selon la plateforme, et parfois selon les
locales.</p>
<p>En détails, voici ce que la <a href=
"http://www.UNIX-systems.org/online.html">Single Unix
specification</a> dit à propos du type
`<code>wchar_t</code>' :</p>
<p><em>Tous les codes de caractères 16 bits dans un
processus donné consistent en un nombre égal de bits.
Ceci en contraste avec les caractères, qui peuvent
être constitués d'un nombre variable d'octets. L'octet
ou la séquence d'octets qui représentent un
caractère peuvent aussi être représentés
comme un code de caractère 16 bits. Les codes de
caractères 16 bits fournissent donc une taille uniforme pour
manipuler les données textuelles. Un code de
caractère 16 bits ayant tous les bits à 0 est un code
de caractère 16 bits nul (null), et termine une
chaîne. La valeur des caractères larges pour chaque
membre du "Portable Character Set"</em> (i.e ASCII) <em>est
égale quand il est utilisé en tant que seul
caractère dans un caractère entier (integer)
constant. Les codes de caractères 16 bits pour les autres
caractères dépendent des locales et de
l'implémentation. Les octets modificateurs d'état
n'ont pas de représentation en code de caractère 16
bits.</em></p>
<p>Une conséquence notable est que dans des programmes
portables vous ne devriez pas utiliser des caractères
non-ASCII dans des chaînes littérales. Cela signifie
que même si vous savez que les doubles guillemets ont les
codes U+201C et U+201D, vous ne devriez pas écrire une
chaîne littérale <code>L"\u201cBonjour\u201d, dit
il"</code> ou <code>"\xe2\x80\x9cBonjour\xe2\x80\x9d, dit
il"</code> dans des programmes C. Utilisez plutôt GNU gettext
comme cela : <code>gettext ("'Bonjour', dit il")</code>, et
créez une base de données de messages en.UTF-8.po qui
traduit "'Bonjour' dit il" en <code>"\u201cBonjour\u201d, dit
il"</code>.</p>
<p>Voici une étude de la portabilité des
aménagements ISO/ANSI C sur diverses implémentations
d'Unix. La GNU glibc-2.2 les supportera tous, mais pour l'instant
nous avons le tableau suivant.</p>
<dl>
<dt><b>GNU glibc-2.0.x, glibc-2.1.x</b></dt>
<dd>
<ul>
<li><wchar.h> et <wctype.h> existent.</li>
<li>Possède les fonctions wcs/mbs, mais pas
fgetwc/fputwc/wprintf.</li>
<li>Pas de locales UTF-8.</li>
<li>mbrtowc retourne EILSEQ pour les octets >= 0x80.</li>
</ul>
</dd>
<dt><b>Solaris 2.7</b></dt>
<dd>
<ul>
<li><wchar.h> et <wctype.h> existent.</li>
<li>Possède toutes les fonctions wcs/mbs,
fgetwc/fputwc/wprintf.</li>
<li>Supporte les locales UTF-8 suivantes : en_US.UTF-8,
de.UTF-8, es.UTF-8, fr.UTF-8, it.UTF-8, sv.UTF-8.</li>
<li>mbrtowc retourne EILSEQ pour les octets >= 0x80.</li>
</ul>
</dd>
<dt><b>OSF/1 4.0d</b></dt>
<dd>
<ul>
<li><wchar.h> et <wctype.h> existent.</li>
<li>Possède toutes les fonctions wcs/mbs,
fgetwc/fputwc/wprintf.</li>
<li>A en plus universal.utf8@ucs4 locale, voir "man 5
unicode".</li>
<li>mbrtowc ne connaît pas UTF-8.</li>
</ul>
</dd>
<dt><b>Irix 6.5</b></dt>
<dd>
<ul>
<li><wchar.h> et <wctype.h> existent.</li>
<li>Possède les fonctions wcs/mbs et fgetwc/fputwc, mais pas
wprintf.</li>
<li>N'a pas de locales multi-octets.</li>
<li>A seulement un simulacre de définition pour
mbstate_t.</li>
<li>N'a pas mbrtowc.</li>
</ul>
</dd>
<dt><b>HP-UX 11.00</b></dt>
<dd>
<ul>
<li><wchar.h> existe, mais pas <wctype.h>.</li>
<li>Possède les fonctions wcs/mbs et fgetwc/fputwc, mais pas
wprintf.</li>
<li>A une locale C.utf8.</li>
<li>N'a pas mbstate_t.</li>
<li>N'a pas mbrtowc.</li>
</ul>
</dd>
<dt><b>AIX 4.2</b></dt>
<dd>
<ul>
<li><wchar.h> existe, mais pas <wctype.h> - utilisez
à la place <ctype.h> et <wchar.h>.</li>
<li>Possède les fonctions wcs/mbs et fgetwc/fputwc, mais pas
wprintf.</li>
<li>Possède les locales UTF-8 suivantes : ET_EE.UTF-8,
LT_LT.UTF-8, LV_LV.UTF-8, ZH_CN.UTF-8.</li>
<li>N'a pas mbstate_t.</li>
<li>N'a pas mbrtowc.</li>
</ul>
</dd>
</dl>
<p>Par conséquent je recommande l'utilisation des fonctions
redémarrables et multithread-safe wcsr/mbsr. Oubliez les
systèmes qui ne les ont pas (Irix, HP-UX, Aix), et utilisez
le plug-in qui permet d'utiliser des locales UTF-8, libutf8_plug.so
(voir ci dessous) sur les systèmes qui vous permettent de
compiler des programmes qui utilisent ces fonctions wcrs/mbsr
(Linux, Solaris, OSF/1).</p>
<p>Un avis similaire, donné par Sun dans <a href=
"http://www.sun.com/software/white-papers/wp-unicode/">http://www.sun.com/software/white-papers/wp-unicode/</a>,
section "Internationalized Applications with Unicode",
est :</p>
<p><em>Pour internationaliser correctement une application utilisez
les indications suivantes :</em></p>
<ol>
<li><em>Évitez l'accès direct à Unicode. Ceci
est la tâche de la couche d'internationalisation de la
plateforme.</em></li>
<li><em>Utilisez le modèles POSIX pour les interfaces
multi-octets et à caractères 16 bits.</em></li>
<li><em>Appelez seulement les fonctions de l'API que la couche
d'internationalisation fournit pour la langue et les
opération spécifiques à la culture.</em></li>
<li><em>Restez indépendant de l'encodage.</em></li>
</ol>
<p>Si, pour une raison quelconque, vous devez vraiment supposer que
'wchar_t' est Unicode dans un morceau de code (par exemple, si vous
voulez faire un traitement spécial de certains
caractères Unicode), vous devriez rendre ce bout de code
conditionnel selon le résultat de
<code>is_locale_utf88()</code>. Autrement vous allez mettre la
pagaille dans le comportement de votre programme sur d'autres
plateformes, ou si d'autres locales sont utilisées. La
fonction <code>is_locale_utf8()</code> est déclarée
dans <a href="utf8locale.h">utf8locale.h</a> et définie dans
<a href="utf8locale.c">utf8locale.c</a>.</p>
<h3>La bibliothèque libutf8</h3>
<p>Une implémentation portable de l'API ISO/ANSI C, qui
supporte les locales 8-bits et les locales UTF-8, peut être
trouvée dans <a href=
"libutf8-0.5.2.tar.gz">libutf8-0.5.2.tar.gz</a></p>
<p>Avantages :</p>
<ul>
<li>Dès maintenant un support pour Unicode UTF-8 portable,
même sur les systèmes d'exploitation dont le support
des caractères multi-octets ne marche pas, ou qui n'ont pas
du tout de support pour les caractères
multi-octets/larges.</li>
<li>Le même binaire marche pour toutes les locales 8-bit et
les locales UTF-8 supportées par le système.</li>
<li>Quand un système d'exploitation fournit un vrai support
pour les caractères multi-octets, vous pouvez en tirer
avantage simplement en recompilant sans l'option du compilateur
-DHAVE_LIBUTF8.</li>
</ul>
<h3>La méthode Plan9</h3>
<p>Le système d'exploitation Plan9, une variante d'Unix,
utilise UTF-8 comme encodage dans toutes ses applications. Son type
de caractère large est appelé '<code>Rune</code>',
pas '<code>wchar_</code>'. Des parties ce ses bibliothèques,
écrites par Rob Pike et Howard Trikey, sont disponibles
à <a href=
"ftp://ftp.cdrom.com/pub/netlib/research/9libs/9libs-1.0.tar.gz">ftp://ftp.cdrom.com/pub/netlib/research/9libs/9libs-1.0.tar.gz</a>.
Une autre bibliothèque similaire, écrite par Alistair
G. Crook, est à <a href=
"ftp://ftp.cdrom.com/pub/NetBSD/packages/distfiles/libutf-2.10.tar.gz">
ftp://ftp.cdrom.com/pub/NetBSD/packages/distfiles/libutf-2.10.tar.gz</a>.<br>
En particulier, chacune de ces bibliothèques contient un
moteur d'expressions rationnelles qui comprend l'UTF-8.</p>
<p>Désavantages de cette API :</p>
<ul>
<li>UTF-8 est compilé dans la bibliothèque, pas
optionnel. Les programmes compilés dans cet univers perdent
le support des encodages 8-bits qui sont toujours utilisés
fréquemment en Europe.</li>
</ul>
<h3>Pour les interfaces utilisateur graphiques</h3>
<p>La bibliothèque QT-2.0 <a href=
"http://www.troll.no/">http://www.troll.no/</a> contient la classe
QString qui est totalement Unicode. Vous pouvez utiliser les
fonctions membres QString::utf8 et QString::fromUtf8 pour convertir
depuis/vers un texte encodé en UTF-8. Les fonctions membres
QString::ascii et QString::latin1 ne devraient plus être
utilisées.</p>
<h3>Pour la manipulation de texte avancée</h3>
<p>Les bibliothèques mentionnées
précédemment implémentent des versions des
concepts ASCII qui comprennent Unicode. Voici des
bibliothèques qui traitent des concepts Unicode, comme
titlecase (Une troisième casse de lettres, différente
des majuscules et des minuscules), la distinction entre la
ponctuation et les symboles, la décomposition canonique, les
classes combinables, le classement canonique et d'autres choses du
même genre.</p>
<dl>
<dt><b>ucdata-1.9</b></dt>
<dd>
<p>La bibliothèque ucdata de Mark Leisher <a href=
"http://crl.nmsu.edu/~mleisher/ucdata.html">http://crl.nmsu.edu/~mleisher/ucdata.html</a>
s'occupe des propriétés des caractères, de la
conversion de la casse, de la décomposition, des classes
combinées.</p>
</dd>
<dt><b>ICU</b></dt>
<dd>
<p>Ce sont les classes IBM pour Unicode. <a href=
"http://www.alphaworks.ibm.com/tech/icu/">http://www.alphaworks.ibm.com/tech/icu/</a>.
Une bibliothèque très détaillée
comprenant des chaînes de caractères Unicode, des
paquets de ressources, des formateurs de nombres, de date, d'heure
et de messages, des assemblages, des assembleurs de messages et
plus encore. Beaucoup de locales sont supportées. Cette
bibliothèque est portable pour Unix et Win32, mais compilera
sans intervention ("out of the box") seulement avec la libc6, pas
la libc5.</p>
</dd>
<dt><b>libunicode</b></dt>
<dd>
<p>La librairie Unicode de GNOME <a href=
"http://cvs.gnome.org/lxr/source/libunicode/">http://cvs.gnome.org/lxr/source/libunicode/</a>
de Tom Tromey entre autres. Elle couvre la conversion du jeu de
caractères, les propriétés des
caractères, la décomposition.</p>
</dd>
</dl>
<h3>Pour la conversion</h3>
<p>Deux bibliothèques de conversion qui supportent UTF-8 et
un grand nombre de de jeux de caractères 8-bits, sont
disponibles :</p>
<h3>L'implémentation iconv d'Ulrich Drepper, contenue dans
la GNU glibc-2.2.1</h3>
<p><a href=
"ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.1.1.tar.gz">ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.1.1.tar.gz</a>.</p>
<p>Avantages :</p>
<ul>
<li>iconv est conforme au standard POSIX, les programmes qui
l'utilisent pour la conversion depuis/vers UTF-8 tourneront aussi
sous Solaris. Cependant le nom des jeux de caractères
diffère entre les plateformes. Par exemple, "EUC-JP" sous
glibc devient "eucJP" sous HP-UX. (Le nom INIA officiel pour ce jeu
de caractères est "EUC-JP". Il s'agit donc clairement d'une
déficience de HP-UX.)</li>
<li>Aucune bibliothèque supplémentaire n'est
nécessaire.</li>
</ul>
<h3>librecode par François Pinard</h3>
<p><a href=
"ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz">ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz</a>.</p>
<p>Avantages :</p>
<ul>
<li>Support pour la translittération, i.e conversion de
caractères non-ASCII en séquences de
caractères ASCII de façon à préserver
la lisibilité pour les humains, même lorsqu'une
transformation sans pertes est impossible.</li>
</ul>
<p>Problèmes :</p>
<ul>
<li>Cette API est non standard.</li>
</ul>
<h3>Les autre approches</h3>
<dl>
<dt><b>libutf-8</b></dt>
<dd>
<p>libutf-8, de G.Adam.Stanislav <a href=
"mailto:adam@whizkidtech.net"><adam@whizkidtech.net></a>
contient quelques fonctions pour la conversion depuis/vers des flux
"FILE*". <a href=
"http://www.whizkidtech.net/i18n/libutf-8-1.0.tar.gz">http://www.whizkidtech.net/i18n/libutf-8-1.0.tar.gz</a><br>
Avantages :</p>
<ul>
<li>Très petit.</li>
</ul>
<p>Problèmes :</p>
<ul>
<li>API non standard ;</li>
<li>UTF-8 est compilé dans la bibliothèque, pas
optionnel. Les programmes compilés dans cet univers perdent
le support des encodages 8-bits qui sont toujours utilisés
fréquemment en Europe ;</li>
<li>L'installation n'est pas évidente : le Makefile
doit être modifié. Pas d'auto-configuration.</li>
</ul>
</dd>
</dl>
<h2><a name="ss5.2">5.2 Java</a></h2>
<p>Java supporte Unicode en interne. Le type 'char' désigne
un caractère Unicode, et la classe 'java.lang.String'
désigne une chaîne de caractères construite
à partir de caractères Unicode.</p>
<p>Java peut afficher n'importe quel caractère à
travers son système de fenêtrage AWT, à
condition que</p>
<ol>
<li>vous positionniez la propriété système
"user.language" de façon appropriée.</li>
<li>Les définitions de jeux de fontes
/usr/lib/java/lib/font.properties.<i>language</i> soient
appropriées, et</li>
<li>Le fontes spécifiées dans ce fichier soient
installées.</li>
</ol>
Par exemple, pour afficher du texte contenant des caractères
japonais, vous devriez installer des fontes japonaise, et lancer
"java -Duser.language=ja ...". Vous pouvez combiner les jeux de
fontes : pour pouvoir afficher des caractères d'Europe
de l'ouest, grecs et japonais simultanément, vous devriez
créer une combinaison des fichiers "font.properties" (couvre
ISO-8859-1), "font.properties.el" (couvre ISO-8859-7) et
"font.properties.ja" dans un seul fichier. ??Ceci n'a pas
été testé??
<p>Les interfaces java.io.DataInput et java.io.DataOutput
contiennent des méthodes appelées 'readUTF', et
'writeUTF' respectivement. Mais notez qu'elles n'utilisent pas
UTF-8 ; elles utilisent un encodage UTF-8
modifié : le caractère NUL est encodé
dans une séquence de deux octets 0xC0 et 0x80 à la
place de 0x00, et un octet 0x00 est ajouté à la fin.
Encodées de cette façon, les chaînes peuvent
contenir des caractères NUL mais elles doivent
néanmoins être préfixées par un champ de
taille. Les fonctions C <string.h> comme strlen() et strcpy()
peuvent être utilisées pour les manipuler.</p>
<h2><a name="ss5.3">5.3 Lisp</a></h2>
<p>Le standard Lisp ordinaire détermine deux types de
caractères : 'base-char' et 'character'. C'est à
l 'implémentation d'ajouter un support Unicode ou non. Ce
langage détermine aussi un mot-clef argument
':external-format' pour 'open' comme place naturelle pour
spécifier un jeu de caractères ou un encodage.</p>
<p>Parmi les implémentation gratuites du lisp standard, seul
CLISP <a href="http://clisp.cons.org/">http://clisp.cons.org/</a>
supporte Unicode. Vous aurez besoin d'une version de CLISP datant
de juillet 99 ou plus récente. <a href=
"ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz">ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz</a>
Les types "base-char" et "character" sont tous équivalents
au 16-bits Unicode. L'encodage utilisé pour le fichier ou
l'I/O socket/pipe peut être spécifié par
l'argument ':external-format'. Les encodages utilisés pour
les opérations d'entrée/sortie sur des ttys et
l'encodage par défaut pour les I/O file/socket
dépendent des locales.</p>
<p>Parmi les implémentations commerciales du Lisp standard,
seule Eclipse <a href=
"http://www.elwood.com/eclipse/eclipse.htm">http://www.elwood.com/eclipse/eclipse.htm</a>
supporte Unicode. Voir <a href=
"http://www.elwood.com/eclipse/char.htm">http://www.elwood.com/eclipse/char.htm</a>
Le type 'base-char' est équivalent à ISO-8859-1, et
le type 'character' contient tous les caractères Unicode.
L'encodage utilisé pour les entrées/sorties sur un
fichier peut être défini à travers une
combinaison des arguments de 'open' ':element-type' et
:'external.format'.<br>
Limitations : les fonctions d'attributs de caractères
sont dépendantes des locales. Les sources et les fichiers de
sources compilés ne peuvent pas contenir des chaînes
Unicode littérales. L'implémentation commerciale du
Lisp standard Allegro CL ne contient pas encore de support Unicode,
mais Erik Naggum y travaille.</p>
<h2><a name="ss5.4">5.4 Ada95</a></h2>
<p>Ada95 a été conçu pour supporter Unicode,
et la bibliothèque standard Ada95 contient les types de
données spéciaux ISO 10646-1 Wide_Character et
Wide_String, ainsi que de nombreuses procédures et fonctions
associées. Le compilateur Ada95 GNU (gnat-3.11 ou plus)
supporte UTF-8 comme encodage externe des caractères 16
bits. Cela vous autorise à utiliser UTF-8 à la fois
dans le code source et dans les entrées/sorties de
l'application. Pour l'activer dans l'application, utilisez "WCEM=8"
dans la chaîne FORM quand vous ouvrez un fichier, et utilisez
l'option du compilateur "-gnatW8" si le code source est UTF-8. Pour
plus de détails, voyez les manuels de
référence GNAT et Ada95.</p>
</body>
</html>
|